Spring Boot Shiro Remember Me

发布时间:2026/9/1 20:30:12
Spring Boot Shiro Remember Me 一、前言接着《Spring-Boot-shiro用户认证》当用户成功登录后关闭浏览器然后再打开浏览器访问http://localhost:8080/web/index页面会跳转到登录页之前的登录因为浏览器的关闭已经失效。Shiro为我们提供了Remember Me的功能用户的登录状态不会因为浏览器的关闭而失效直到Cookie过期。二、更改 ShiroConfig继续编辑ShiroConfig加入/** * cookie对象 * return */publicSimpleCookierememberMeCookie(){// 设置cookie名称对应login.html页面的input typecheckbox namerememberMe/SimpleCookiecookienewSimpleCookie(rememberMe);// 设置cookie的过期时间单位为秒这里为一天cookie.setMaxAge(86400);returncookie;}/** * cookie管理对象 * return */publicCookieRememberMeManagerrememberMeManager(){CookieRememberMeManagercookieRememberMeManagernewCookieRememberMeManager();cookieRememberMeManager.setCookie(rememberMeCookie());// rememberMe cookie加密的密钥cookieRememberMeManager.setCipherKey(Base64.decode(4AvVhmFLUs0KTA3Kprsdag));returncookieRememberMeManager;}接下来将cookie管理对象设置到SecurityManager中BeanpublicSecurityManagersecurityManager(){DefaultWebSecurityManagersecurityManagernewDefaultWebSecurityManager();securityManager.setRealm(shiroRealm());securityManager.setRememberMeManager(rememberMeManager());returnsecurityManager;}最后修改权限配置将ShiroFilterFactoryBean的filterChainDefinitionMap.put(“/**”, “authc”);更改为filterChainDefinitionMap.put(“/**”, “user”);user指的是用户认证通过或者配置了Remember Me记住用户登录状态后可访问。三、更改 login.html在login.html中加入Remember Me checkbox!DOCTYPEhtmlhtmlxmlns:thhttp://www.thymeleaf.orgheadmetacharsetUTF-8title登录/titlelinkrelstylesheetth:href{/css/login.css}typetext/cssscriptth:src{/js/jquery-1.11.1.min.js}/script/headbodydivclasslogin-pagedivclassforminputtypetextplaceholder用户名nameusernamerequiredrequired/inputtypepasswordplaceholder密码namepasswordrequiredrequired/pinputtypecheckboxnamerememberMe/记住我/pbuttononclicklogin()登录/button/div/div/bodyscriptth:inlinejavascriptvarctx[[{/}]];functionlogin(){varusername$(input[nameusername]).val();varpassword$(input[namepassword]).val();varrememberMe$(input[namerememberMe]).is(:checked);$.ajax({type:post,url:ctxlogin,data:{username:username,password:password,rememberMe:rememberMe},dataType:json,success:function(r){if(r.code0){location.hrefctxindex;}else{alert(r.msg);}}});}/script/html四、更改 LoginController更改LoginController的login()方法PostMapping(/login)ResponseBodypublicResponseBologin(Stringusername,Stringpassword,StringrememberMe){passwordMD5Utils.encrypt(username,password);UsernamePasswordTokentokennewUsernamePasswordToken(username,password,rememberMe);SubjectsubjectSecurityUtils.getSubject();try{subject.login(token);returnResponseBo.ok();}catch(UnknownAccountExceptione){returnResponseBo.error(e.getMessage());}catch(IncorrectCredentialsExceptione){returnResponseBo.error(e.getMessage());}catch(LockedAccountExceptione){returnResponseBo.error(e.getMessage());}catch(AuthenticationExceptione){returnResponseBo.error(认证失败);}}当rememberMe参数为true的时候Shiro就会帮我们记住用户的登录状态。启动项目即可看到效果。

相关新闻