源码:https://gitee.com/xxxiaowu/springboot-shiro
首先导入依赖
<!--shiro整合springboot的依赖-->
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.8.0</version>
</dependency>
<!--thymeleaf-shiro-->
<dependency>
<groupId>com.github.theborakompanioni</groupId>
<artifactId>thymeleaf-extras-shiro</artifactId>
<version>2.1.0</version>
</dependency>
在前端添加记住我的按钮
<input type="checkbox" name="rememberMe"/> 记住我
修改controller,把rememberMe封装到用户登录数据中
@RequestMapping("/login")
public String Login(String username, String password, Model model,boolean rememberMe){
System.out.println("======================>"+rememberMe);
//获取当前用户
Subject subject = SecurityUtils.getSubject();
//封装用户的登录数据
UsernamePasswordToken token = new UsernamePasswordToken(username,password,rememberMe);
try {
//执行登录方法
subject.login(token);
return "index";
} catch (UnknownAccountException e) {
model.addAttribute("msg","用户名不存在");
return "login";
} catch (IncorrectCredentialsException e){
model.addAttribute("msg","密码错误");
return "login";
}
}
在ShiroConfig里边注入rememberMe
//DefaultWebSecurityManager
@Bean(name = "securityManager")
public DefaultWebSecurityManager getDefaultWebSecurityManager(@Qualifier("userRealm") UserRealm userRealm){
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
//关联UserRealm
securityManager.setRealm(userRealm);
//注入记住我
securityManager.setRememberMeManager(getCookieRememberMeManager());
return securityManager;
}
/**
* cookie对象
* rememberMeCookie()方法是设置Cookie的生成模板,比如Cookie的有效时间
*/
@Bean
public SimpleCookie getRememberCookie(){
//这里边的rememberMe这个参数对应的就是前段记住我input标签的name属性
SimpleCookie simpleCookie = new SimpleCookie("rememberMe");
//这个是cookie过期的时间单位是 秒
simpleCookie.setMaxAge(60*60);
return simpleCookie;
}
/**
* cookie管理对象
* rememberMeManager()方法是生成rememberMe管理器,而且要将这个
* rememberMe管理器设置到securityManage里边
*/
@Bean
public CookieRememberMeManager getCookieRememberMeManager(){
CookieRememberMeManager cookieRememberMeManager = new CookieRememberMeManager();
cookieRememberMeManager.setCookie(getRememberCookie());
//cookieRememberMeManager.setCipherKey()
// 对rememberMe cookie 加密 长度必须是16位,不安然会报异常
cookieRememberMeManager.setCipherKey("ChengXuYuanYiMei".getBytes());
return cookieRememberMeManager;
}
这样就是实现了记住我功能