概述

認證和記住我

建議

身份驗證相關

實現
如果要自己做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也可以單獨配置

