1. 程式人生 > >SSM+Apache shiro--ehcache緩存清理

SSM+Apache shiro--ehcache緩存清理

ring remove pack 權限 oid man 實時更新 使用 logo

使用ehache進行緩存,可以再登陸認證成功後緩存認證授權及權限信息,但是用戶退出時,該用戶對應的權限信息不能進行實時更新,所以要求在用戶退出系統時可以清理其對應的權限信息緩存。

在配置ehcache緩存是我們配置了myshiroCache,並在myrealm中指定了權限緩存的名字,所以在用戶退出時就可以通過cacheManager及緩存名字獲取該信息,並清理,實現退出系統時清理權限信息。

package com.copsec.railway.im.util;
import org.apache.log4j.Logger;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.cache.Cache; import org.apache.shiro.cache.CacheManager; import org.apache.shiro.subject.SimplePrincipalCollection; import org.apache.shiro.subject.Subject;public class ShiroAuthorizationHelper { private static CacheManager cacheManager; private static Logger logger = Logger.getLogger(ShiroAuthorizationHelper.class);
/** * 清除用戶的權限 * * * @param principal 登陸用戶對應的principal對象 */ public static void clearAuthorizationInfo(SimplePrincipalCollection principal) { logger.info("clear the user: " + principal.toString() + "‘s authorizationInfo"); Cache<Object, Object> cache = cacheManager.getCache("myShiroCache"); cache.remove(principal); }
/** * 清除當前用戶的權限 */ public static void clearAuthorizationInfo() { if (SecurityUtils.getSubject().isAuthenticated()) { Subject subject = SecurityUtils.getSubject(); String username = subject.getPrincipal().toString(); String realmName = subject.getPrincipals().getRealmNames().iterator().next(); SimplePrincipalCollection principalCollection = new SimplePrincipalCollection(username, realmName); logger.debug("get user principalCollection :"+principalCollection); // 調用清理用戶權限 clearAuthorizationInfo(principalCollection); } } /** * 由Spring bean將對象註入 * @param cacheManager */ public static void setCacheManager(CacheManager cacheManager) { ShiroAuthorizationHelper.cacheManager = cacheManager; } }

完成後即可在logout controller中調用,進行清理權限信息。

SSM+Apache shiro--ehcache緩存清理