概述
認證和記住我
建議
身份驗證相關
實現
如果要自己做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也可以單獨配置