概述

  Shiro-RememberMe-LMLPHP

认证和记住我

  Shiro-RememberMe-LMLPHP

建议

  Shiro-RememberMe-LMLPHP

身份验证相关

  Shiro-RememberMe-LMLPHP

实现

如果要自己做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的一个属性,

Shiro-RememberMe-LMLPHP

所以可以在 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

Shiro-RememberMe-LMLPHP

当然 rememeberMeManager也可以单独配置

Shiro-RememberMe-LMLPHP

05-28 14:43