Shiro-RememberMe
概述
认证和记住我
建议
身份验证相关
实现
如果要自己做RememeberMe,需要在登录之前创建Token:UsernamePasswordToken(用户名,密码,是否记住我),且调用
UsernamePasswordToken 的 : token.setRememeberMe(true);
@RequestMapping("/login") public String login(@RequestParam("userName") String userName, @RequestParam("password") String password) { Subject currentUser = SecurityUtils.getSubject(); if (!currentUser.isAuthenticated()) { UsernamePasswordToken token = new UsernamePasswordToken(userName, password); token.setRememberMe(true); try { currentUser.login(token); } catch (AuthenticationException e) { System.out.println("登录失败:" + e.getMessage()); } } return "redirect:/list.jsp"; }
RememeberMe 实际上是由 rememeberMeManager进行配置的 rememeberMeManager是SecurityManager的一个属性,
所以可以在 applicationContext的 SecurityManager 中配置 rememeberMeManager
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager"> <property name="cacheManager" ref="cacheManager"/> <!-- Single realm app. If you have multiple realms, use the 'realms' property instead. --> <!-- 配置session的管理方式 --> <!-- <property name="sessionMode" value="native"/> --> <!-- <property name="realm" ref="jdbcRealm"/> --> <!-- 配置多个Realm --> <property name="authenticator" ref="authenticator"></property> <property name="realms"> <list> <ref bean="jdbcRealm"/> <ref bean="secondRealm"/> </list> </property> <!-- 将cookie的作用时间配置为10s --> <property name="rememberMeManager.cookie.maxAge" value="10"></property> </bean>
可以看到 cookie的maxAge已被修改为 10s
当然 rememeberMeManager也可以单独配置