shiro教程:记住我功能

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

1、applicationContext-shiro.xml文件

  
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        
        <property name="rememberMeManager" ref="rememberMeManager">property>
    bean>

    
    <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">  
        <constructor-arg value="rememberMe"/>
        
        <property name="maxAge" value="#{7 * 24 * 60 * 60}"/>
        <property name="domain" value=".yzixi.com"/> 
    bean>

    
    <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中即可。

你可能感兴趣的:(√,shiro)