Contents
  1. 1. 流程
  2. 2. 功能
  3. 3. 过滤器
  4. 4. 整合Spring

参考blog SpringBoot项目:
http://www.cnblogs.com/ityouknow/p/7089177.html

参考我的源码:(设置了密码器、包含用户、角色创建、权限分配、权限标签的使用、ehcache缓存和清空、验证码等模块的Demo)
初始用户 admin /123456
https://github.com/huangzhenshi/spring_shiro

非常全面的blog,但是源码有问题
https://github.com/codingXiaxw/shiro

流程

  • 设置ShiroConfig类,写Filter过滤方法,默认静态资源的访问,登录页面是不需要权限认证的
  • 设置用户类:用户名、密码、List<角色>等信息
  • 登录的时候会调用MyShiroRealm.doGetAuthenticationInfo(),方法,查询用户,并且把用户信息缓存起来
  • 调用其它资源的时候,会调用MyShiroRealm.doGetAuthorizationInfo()方法,查询缓存中的UserInfo,然后遍历角色和角色对应的资源,放回给系统进行过滤
  • 编写方法的时候添加注解,表明该方法的需要用户具备 某某某资源
    @RequestMapping("/userList")
    @RequiresPermissions("userInfo:view")//权限管理;
    public String userInfo(){
    return "userInfo";
    }

功能

  • Authentication:身份认证/登录,验证用户是不是拥有相应的身份。

  • Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。或者细粒度的验证某个用户对某个资源是否具有某个权限。

  • Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储。

  • Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

  • Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中;会话可以是普通 JavaSE 环境的,也可以是如 Web 环境的。

  • Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率。

  • Concurrency:shiro 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去。

过滤器

/admins/**=anon # 表示该 uri 可以匿名访问
/admins/**=auth # 表示该 uri 需要认证才能访问
/admins/**=authcBasic # 表示该 uri 需要 httpBasic 认证
/admins/**=perms[user:add:*] # 表示该 uri 需要认证用户拥有 user:add:* 权限才能访问
/admins/**=port[8081] # 表示该 uri 需要使用 8081 端口
/admins/**=rest[user] # 相当于 /admins/**=perms[user:method],其中,method 表示 get、post、delete 等
/admins/**=roles[admin] # 表示该 uri 需要认证用户拥有 admin 角色才能访问
/admins/**=ssl # 表示该 uri 需要使用 https 协议
/admins/**=user # 表示该 uri 需要认证或通过记住我认证才能访问
/logout=logout # 表示注销,可以当作固定配置

整合Spring

  1. maven 相关依赖(如果依赖shiro-web的话,loginUrl的处理逻辑会不同)

    <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-core</artifactId>
    <version>1.4.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.0</version>
    </dependency>
  2. web.xml配置

<!-- shiro过滤器定义 -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
  1. 如果用ehcache缓存的话,配置ehcache的缓存管理器

    <bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
    <property name="configLocation" value="classpath:${ehcache.file}"></property>
    </bean>
  2. ShiroFilter的配置
    4种常用的过滤规则:

  • anon:例子/admins/**=anon 没有参数,表示可以匿名使用。

  • authc:例如/admins/user/**=authc表示需要认证(登录)才能使用,没有参数

  • roles:例子/admins/user/=roles[admin],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,当有多个参数时,例如admins/user/=roles[“admin,guest”],每个参数通过才算通过,相当于hasAllRoles()方法。

  • perms:例子/admins/user/=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/=perms[“user:add:,user:modify:“],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法

  1. securityManager的配置

    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="systemAuthorizingRealm" />
    <property name="sessionManager" ref="sessionManager" />
    <property name="cacheManager" ref="shiroCacheManager" />
    </bean>
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
    <property name="realm" ref="customRealm" />
    </bean>
  2. 自定义 realm

    # 不含加密器设置
    <bean id="customRealm" class="com.light.ac.web.realm.CustomRealm" />
    # 含加密器的设置
    <bean id="customRealm" class="com.light.ac.web.realm.CustomRealm">
    <property name="credentialsMatcher" ref="credentialsMatcher"/>
    </bean>
    <bean id="credentialsMatcher" class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
    <property name="hashAlgorithmName" value="md5"/>
    <property name="hashIterations" value="1"/>
    </bean>
Contents
  1. 1. 流程
  2. 2. 功能
  3. 3. 过滤器
  4. 4. 整合Spring