shiro在更新权限后更新cache里的权限等信息

在spring-xml配置文件中,我们配置了缓存开启:

	
	

	
	
		
		
		
		
		
		
	

	
	
		
		
		
	

通过shiroCacheManager,可以极大的提升性能,不用每次都去数据库获取权限信息,以下就是在controller中更新缓存的方法:

@RequestMapping(value="/clearShiroCatch",method= RequestMethod.GET)
    @ResponseBody
    public void clearShiroCatch(){
        //获取权限看一下
        /*
        /*  @Autowired
            private MemoryConstrainedCacheManager shiroCacheManager;
        */
        Cache cache  = shiroCacheManager.getCache("org.apache.shiro.realm.jdbc.JdbcRealm.authorizationCache");
//        shiroCacheManager.destroy();//清除全部缓存
//        LifecycleUtils.destroy(cache);//清除某个缓存
        Subject subject = SecurityUtils.getSubject();
        /*subject.getPrincipal()------>登录名
        String realmName = subject.getPrincipals().getRealmNames().iterator().next();
        //第一个参数为用户名,想要操作权限的用户,第二个参数为realmName,
        SimplePrincipalCollection principals = new SimplePrincipalCollection(subject.getPrincipal(),realmName);
        */
        RealmSecurityManager securityManager =
                (RealmSecurityManager) SecurityUtils.getSecurityManager();
        JdbcRealm jdbcRealm = (JdbcRealm)securityManager.getRealms().iterator().next();
        //删除登陆人
        jdbcRealm.getAuthorizationCache().remove(subject.getPrincipal());
        //删除登陆人对应的缓存
        jdbcRealm.getAuthorizationCache().remove(subject.getPrincipals());
        //重新加载subject
        subject.releaseRunAs();

    }

你可能感兴趣的:(java)