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也可以单独配置

原文地址:https://www.cnblogs.com/wq3435/p/6275779.html