shiro教程:记住我功能

虽然不太推荐使用记住我功能, 但是,还是讲一下这个功能,实际上大多数使用session来管理。

1、applicationContext-shiro.xml文件

  <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!-- 配置记住我 -->
        <property name="rememberMeManager" ref="rememberMeManager"></property>
    </bean>

    <!-- 记住密码Cookie -->
    <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
        <constructor-arg value="rememberMe"/>
        <!-- 7天,采用spring el表达式来计算,方便修改 -->
        <property name="maxAge" value="#{7 * 24 * 60 * 60}"/>
        <property name="domain" value=".yzixi.com"/> 
    </bean>

    <!-- rememberMe管理器,cipherKey生成见{@code Base64Test.java} -->
    <bean id="rememberMeManager" class="org.apache.shiro.web.mgt.CookieRememberMeManager">
        <property name="cookie" ref="rememberMeCookie"/>  
    </bean>

2、登录页面

        <div class="form-actions">
                    <div class="pull-left">
                        <label class="rememberme mt-checkbox mt-checkbox-outline">
                            <input type="checkbox" name="isRememberMe" value="1" /> 记住我
                            <span></span>
                        </label>
                    </div>
                </div>

3、controller

@RequestMapping(value = "/login", method = RequestMethod.POST)
    @ResponseBody
    public LeeJSONResult doPostlogin(String username, String password, String captcha, @RequestParam(value="isRememberMe", defaultValue="0") Integer isRememberMe, HttpServletRequest request, HttpServletResponse response) {

        if (StringUtils.isBlank(username)) {
            return LeeJSONResult.errorMsg("用户名不能为空");
        }
        if (StringUtils.isBlank(password)) {
            return LeeJSONResult.errorMsg("密码不能为空");
        }
        if (!itzixiCaptcha.validate(request, response, captcha)) {
            return LeeJSONResult.errorMsg("验证码错误, 请重新输入...");
        }
        Subject user = SecurityUtils.getSubject();

        UsernamePasswordToken token = new UsernamePasswordToken(username, password.toCharArray());

        if (isRememberMe == 1) {
            token.setRememberMe(true);
        }

        try {
            user.login(token);
        } catch (UnknownAccountException e) {
            return LeeJSONResult.errorMsg("账号不存在");
        } catch (DisabledAccountException e) {
            return LeeJSONResult.errorMsg("账号未启用");
        } catch (IncorrectCredentialsException e) {
            return LeeJSONResult.errorMsg("密码错误");
        } catch (RuntimeException e) {
            return LeeJSONResult.errorMsg("未知错误,请联系管理员");
        }

        return LeeJSONResult.ok();
    }

主要是下面这个代码

   if (isRememberMe == 1) {
            token.setRememberMe(true);
        }

当我们选中了记住我后,设置到token中即可。

猜你喜欢

转载自blog.csdn.net/sihai12345/article/details/81170550