shiro教程——记住我功能

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> 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中即可。

原文地址:https://sihai.blog.csdn.net/article/details/81170550

本人花费半年的时间总结的《Java面试指南》已拿腾讯等大厂offer,已开源在github ,欢迎star!

本文GitHub https://github.com/OUYANGSIHAI/JavaInterview 已收录,这是我花了6个月总结的一线大厂Java面试总结,本人已拿大厂offer,欢迎star

原文链接:blog.ouyangsihai.cn >> shiro教程——记住我功能


 上一篇
shiro教程——session管理 shiro教程——session管理
当我们项目需要进行session管理的时候,我们就需要进行相关的配置了,下面讲一下步骤 1、配置文件配置首先我们需要对sessionManager进行相关的配置。 &lt;!-- 会话管理器 start --&gt;
2021-04-04
下一篇 
并发基础(七)——Thread 类的sleep()、yeild()、join() 并发基础(七)——Thread 类的sleep()、yeild()、join()
1、Thread.sleep(long millis ) sleep( )是一个静态方法,让当前正在执行的线程休眠(暂停执行),而且在睡眠的过程是不释放资源的,保持着锁。 在睡眠的过程,可以被中断,注意抛出InterruptedExce
2021-04-04