Shiro 缓存配置
当我们进行授权操作时,每次都会从数据库查询用户权限信息,为了提高授权性能,可以将用户权限信息查询出来以后进行缓存,下次授权时从缓存取数据即可。 Shiro 中内置缓存应用实现,其步骤如下:
第一步:在 SpringShiroConfig 中配置缓存 Bean 对象(Shiro 框架提供)。
@Bean public CacheManager shiroCacheManager(){
return new MemoryConstrainedCacheManager();
}
说明:这个 CacheManager 对象的名字不能写 cacheManager,因为 spring 容器中已经存在一个名字为 cacheManager 的对象了。
第二步:修改 securityManager 的配置,将缓存对象注入给 SecurityManager 对象。
@Bean public SecurityManager securityManager( Realm realm, CacheManager cacheManager) { DefaultWebSecurityManager sManager=new DefaultWebSecurityManager(); sManager.setRealm(realm); sManager.setCacheManager(cacheManager); return sManager;}
说明:对于 shiro 框架而言,还可以借助第三方的缓存产品(例如 redis)对用户的权限信息进行 cache 操作.
Shiro 记住我
记住我功能是要在用户登录成功以后,假如关闭浏览器,下次再访问系统资源(例如首页 doIndexUI)时,无需再执行登录操作。 客户端业务实现 在页面上选中记住我,然后执行提交操作,将用户名,密码,记住我对应的值提交到控制层,如图所示:
其客户端 login.html 中关键 JS 实现:
function doLogin(){ var params={ username:$("#usernameId").val(), password:$("#passwordId").val(), isRememberMe:$("#rememberId").prop("checked"), } var url="user/doLogin"; console.log("params",params); $.post(url,params,function(result){ if(result.state==1){ //跳转到 indexUI 对应的页面 location.href="doIndexUI?t="+Math.random(); }else{ $(".login-box-msg").html(result.message); } return false;//防止刷新时重复提交 }); }
服务端业务实现
服务端业务实现的具体步骤如下:
第一步:在 SysUserController 中的 doLogin 方法中基于是否选中记住我,设置 token 的 setRememberMe 方法。
第二步:在 SpringShiroConfig 配置类中添加记住我配置,关键代码如下:
第三步:在 SpringShiroConfig 中修改 securityManager 的配置,为 securityManager 注入 rememberManager 对象。