Shiro自动登陆就是在cookis保存信息,这样子在设置的过期时间前把凭证保存到了浏览器客户端,再次访问就无需要再登陆。
这里只给了实现的部分的代码。
1.在Shiro配置文件里面配置
@Bean(name="securityManager")
public DefaultWebSecurityManager securityManager(@Qualifier("sessionManager")CustomSessionManager sessionManager, @Qualifier("cookieRememberMeManager")CookieRememberMeManager rememberMeManager) {
DefaultWebSecurityManager manager=new DefaultWebSecurityManager();
//配置自定义Realm
manager.setRealm(customRealm);
//配置自定义sessionManager
manager.setSessionManager(sessionManager);
//配置自定义cacheManager
manager.setCacheManager(redisCacheManager);
//配置自定义cookieManager,就是加多了这里
manager.setRememberMeManager(rememberMeManager);
HashedCredentialsMatcher matcher = new HashedCredentialsMatcher(); //创建加密对象
matcher.setHashAlgorithmName("md5"); //加密的算法
matcher.setHashIterations(1);//加密次数
customRealm.setCredentialsMatcher(matcher); //放入自定义Realm
return manager;
}
//配置coookie
@Bean(name="cookieRememberMeManager")
public CookieRememberMeManager cookieRememberMeManager(){
CookieRememberMeManager manager = new CookieRememberMeManager();
SimpleCookie simpleCookie = new SimpleCookie();
//设置过期时间,秒为单位
simpleCookie.setName("rememberMe");
simpleCookie.setMaxAge(86400);
manager.setCookie(simpleCookie);
return manager;
}
2.使用
在Controller里面的登陆方法里面使用一个方法setRememberMe。 值为flase或者为true
System.out.println(user.isRememberMe());
token.setRememberMe(user.isRememberMe());
3.前台传值
可以在表单里面加多这两个就行,记得在实体类加多这一个属性让后台拿到值。
<input type="checkbox" name="rememberMe" value="true"/> 记住我 </br>
<input name="public" type="hidden" value="false">
4.测试
在浏览器F12查看下Cookie就可以看到我们设置的rememberMe。
注意过期时间要配置下我们时区为东八区。
效果图:
评论