Shiro总篇配置
参考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 支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去。
过滤器
|
整合Spring
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>web.xml配置
|
如果用ehcache缓存的话,配置ehcache的缓存管理器
<bean id="cacheManager" class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean"><property name="configLocation" value="classpath:${ehcache.file}"></property></bean>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()方法
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>自定义 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>

