在上一篇中当我们将浏览器关闭,然后重新打开浏览器访问时会提示你没有权限。
在上一篇的基础上来实现记住我功能
在ShiroConfig注入CookieRememberMeManager
@Bean
public SimpleCookie rememberCookie() {
SimpleCookie rememberCookie = new SimpleCookie("rememberMe");
rememberCookie.setMaxAge(86400);
rememberCookie.setHttpOnly(true);
return rememberCookie;
}
@Bean
public CookieRememberMeManager cookieRememberMeManager() {
CookieRememberMeManager cMeManager = new CookieRememberMeManager();
cMeManager.setCookie(rememberCookie());
//这个地方有点坑,不是所有的base64编码都可以用,长度过大过小都不行,
//没搞明白,官网给出的要么0x开头十六进制,要么base64
cMeManager.setCipherKey(Base64.decode("4AvVhmFLUs0KTA3Kprsdag=="));
return cMeManager;
}
/**
* 核心的安全事务管理器
* @return
*/
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealm(myRealm());
securityManager.setRememberMeManager(cookieRememberMeManager());
return securityManager;
}
在登录控制器代码:
@RequestMapping(value = "login")
public String login(String userName, String password) {
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
token.setRememberMe(true);
subject.login(token);
return "登录成功";
}
测试一哈。
当我们关闭浏览器再次打开时,无需登录就可以访问。
同时我们设置了过期时间为一天,打开F12看看效果
需要注意的是,在配置文件中需要设置为 filterChainDefinitionMap.put("/test/test","user");
在测试的过程中发现如果只在控制器中添加token.setRememberMe(true)即可实现记住我的功能。