shiro基础

shiro 架构

shiro架构图

  • Authentication: 身份认证/登录,是一个可扩展点,可以自定义实现;可以使用认证 策略(Authentication Strategy),即什么情况下算用户认证通过了;
  • Authorization: 权限验证,决定用户有什么样的访问权限。
  • Session Management: 用户session管理,支持非 web环境以及EJB。
  • Cryptography: 加密,保证数据安全性。
  • Web Support:Web 支持,可以非常容易的集成到Web 环境
  • Caching:缓存,例如,可缓存用户session,用户信息,拥有的角色,权限信息
  • Concurrency:Shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能 把权限自动传播过去
  • Run As:允许一个用户假装为另一个用户(如果他们允许)的身份进行访问;
  • Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了

shiro 概述

shiro外观图

  • Subject: 与当前应用程序交互的“用户”。“Subject”可以是一个人,但它也可以表示第三方服务,守护程序帐户,定时任务或类似的东西-基本上是当前与该软件交互的任何东西。Subject 只是一个接口,当与 SecurityManager交互时,会转换为具体的subject。
  • SecurityManager: SecurityManager shiro的核心,管理协调其内部组件,程序员一般不用理会,并且应用程序开发人员几乎所有时间都花在Subject API上。
  • Realms: realm是你的应用和shiro之间桥梁,当需要执行身份验证(登录)和授权(访问控制)时,Shiro会从一个或多个为应用程序配置的realm中查找数据内容。
    xxx 算算算
    s ss

shiro中默认的过滤器

如下的拦截器 都在DefaultFilter 枚举类中有说明

过滤器名称 过滤 描述 例子
anon AnonymousFilter 不需要登录的路径 /user/signup/** = anon
authc FormAuthenticationFilter 用户认证(登录)拦截器,如果验证不通过跳转到你配置的登录页面。主要属性:usernameParam:表单提交的用户名参数名 passwordParam:表单提交的密码参数名 loginUrl:登录页面地址 successUrl:登录成功后的跳转页面failureKeyAttribute 登录失败错误信息存储key
authcBasic BasicHttpAuthenticationFilter Basic Http 身份拦截器 主要属性:applicationName:弹出登录框显示的信息
logout LogoutFilter 退出拦截器 主要属性:redirectUrl:退出成功后重定向的地址
noSessionCreation NoSessionCreationFilter 阻止在请求期间创建新的会话,保证无状态。
perms PermissionsAuthorizationFilter 权限授权拦截器,验证用户是否拥有权限 例子:/user/** = perms[“user:create”]
port PortFilter 端口拦截器
rest HttpMethodPermissionFilter rest 风格拦截器,根据请求的HttpMethod[POST、GET、Delete]进行拦截
roles RolesAuthorizationFilter 角色授权拦截器,验证用户是否拥有所选角色
ssl SslFilter ssl拦截器 只有请求协议是https的才能通过,否则自动跳转到https端口
user UserFilter 用户拦截器,用户已经身份认证/记住我的登录的都可以拦截

web环境下 默认过滤器初始化的地方 DefaultFilterChainManager

    protected void addDefaultFilters(boolean init) {
        for (DefaultFilter defaultFilter : DefaultFilter.values()) {
            addFilter(defaultFilter.name(), defaultFilter.newInstance(), init, false);
        }
    }

shiro权限校验

  • 使用perms 拦截器,对路径进行拦截,判断当前用户是否有权限
  • 使用shiro 注解的形式
  • 在页面使用shiro标签

shiro permission 匹配规则

– 这种情况通常会使用三个部件:域、操作、被付诸实施的实例。如:user:edit:manager
– 也可以使用通配符来定义,如:user:edit:、user::、user::manager
– 部分省略通配符:缺少的部件意味着用户可以访问所有与之匹配的值,比如:user:edit 等价于 user:edit :、user 等价于 user::*
– 注意:通配符只能从字符串的结尾处省略部件,也就
是说 user:edit 并不等价于 user:*:edit

shiro 依赖

非web环境下,仅需要slf4j-api.jar和slf4j的绑定.jars之一。Web配置还需要commons-beanutils-core.jar。可以在需要时添加基于功能的依赖项(Ehcache缓存,基于Quartz的会话验证,Spring依赖项注入等)。


文章作者: EvanZhou
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 EvanZhou !
 上一篇
web应用认证概述 web应用认证概述
1 常见的认证方式1.1 Http Basic Auth每次请求都提供用户的用户名和密码。简单说 Basic Auth是配合Restful API 使用的最简单的认证方式,只需提供用户名密码即可,但是存在把用户名暴露给第三方客户端的风险,再
2019-12-19
下一篇 
elasticsearch-aggregations elasticsearch-aggregations
指标聚合Metrics Aggregations指标聚合分为单值聚合和多值聚合。 单值聚合只返回一个指标 avg Aggregation求平均值 Cardinality Aggregation求基数,统计某个字段有多少个不同值。该值只是近似
2019-11-20
  目录