在文章八讲到了shiro缓存权限信息然后达到共享目的,不过存在一个问题,当用户的权限发生改变的时候,需要用户重新登录,从新缓存用户权限信息。这篇文章将介绍在改变用户的权限时,如何清理用户的权限。我这里写了一个帮助类,先贴也代码:
1 | package com.concom.security.infrastructure.helper; |
上面的ShiroAuthorizationHelper通过spring把ShiroCacheManager注入了进来,并提供了两个静态方法。分别是clearAuthorizationInfo(String username)方法,根据用户名清空用户权限信息,clearAuthenticationInfo(String JSESSIONID),根据sessionId来清除session。上篇文章有提到过ShiroCasRealm.authorizationCache和shiro-activeSessionCache这两个Cache的名称,在这里不再重复。如果有不清楚的,请看回上一篇文章。
因为ShiroAuthorizationHelper是个帮助类,方法是静态方法,可以利用spring来把对象注入到帮助类中。添加如下配置。
1 | <bean class="org.springframework.beans.factory.config.MethodInvokingFactoryBean"> |
将shiroCacheManager注入到ShiroAuthorizationHelper的静态方法中。这样,通过这个工具类,就可以直接调用它的静态方法去清理缓存。当权限缓存被清理后,shiro需要授权时,查找缓存没有权限信息,将会再次调用realm的doGetAuthorizationInfo去load用户的权限,再次放入缓存中。realm的实现在文章五中有介绍,这里不再重复,不清楚的可以看看文章五和文章二。这篇文章也讲到这里。谢谢。