必威体育Betway必威体育官网
当前位置:首页 > IT技术

Shiro第十三章-RememberMe和Cookie

时间:2019-11-07 18:12:17来源:IT技术作者:seo实验室小编阅读:84次「手机版」
 

remember me

简介

  1. 首先在登录页面选中remember me然后登录成功;如果是浏览器登录,一般会把remember me的cookie写到客户端保存下来;
  2. 关闭浏览器再次打开,会发现浏览器还是记住你的;
  3. 访问一般的网页服务端还是知道你是谁的,且能正常访问;
  4. 但是比如我们访问淘宝时,如果要查看我的订单或进行支付时,还是需要再进行身份验证,以确定当前用户还是你。

remember me配置

  • 测试用例:第十二章的示例,ideaProjects/shirochapter12
  • Spring-shiro-web.xml:

    <!-- 会话Cookie模板 -->
    <bean id="sessionIdCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <constructor-arg value="sid"/>
        <property name="httpOnly" value="true"/>
        <property name="maxAge" value="-1"/>
    </bean>
    
    <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
        <constructor-arg value="rememberMe"/>
        <property name="httpOnly" value="true"/>
        <property name="maxAge" value="2592000"/><!-- 30天 -->
    </bean>
    
    <!-- rememberMe管理器 -->
    <bean id="rememberMeManager" 
      class="org.apache.shiro.web.mgt.CookieRememberMeManager">
    
        <property name="cipherKey" 
          value="#{T(org.apache.shiro.codec.base64).decode('4AvVhmFLUs0KTA3Kprsdag==')}"/>
        <property name="cookie" ref="rememberMeCookie"/>
    
    </bean>
    
  • sessionIdCookie:maxAge=-1表示浏览器关闭时Cookie失效。
  • rememberMeCookie:记住我的cookie,保存时长30天。
  • rememberMeManager:rememberMe管理器,cipherKey(cipher:密码)是加密RememberMe Cookie的密钥,默认AES算法

    <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        ……
        <property name="rememberMeManager" ref="rememberMeManager"/>
    </bean>
    
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        ……
        <property name="filterChainDefinitions">
            <value>
                /login.jsp = authc
                /logout = logout
                /authenticated.jsp = authc
                /** = user
            </value>
        </property>
    </bean>
    
  • rememberMeParam:rememberMe请求参数名,请求参数是Boolean类型,true表示RememberMe。
  • /login.jsp = authc:用户必须通过身份验证subject.login(),则Subject.isAuthenticated()==true;一般用于访问特殊网页,如,我的订单、提交订单页面。
  • /** = user:身份验证通过或记住我;一般用于普通网页,如,主页之类的。

  • 测试:

  1. 访问localhost:8080/chapter12/,跳转login页面,登录成功后会设置会话及rememberMeCookie;
  2. 关闭浏览器,会话cookie失效,但rememberMe有效;
  3. 重新打开浏览器访问localhost:8080/chapter12/,可以访问,不再要求登录;
  4. 但是访问/authenticated.jsp,则会跳转登录页面重新进行身份验证。

自定义RememberMe

  • 如果要自己做RememberMe,需要在登录之前这样创建Token:UsernamePasswordToken(用户名,密码,是否记住我),如:
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username, password);
token.setRememberMe(true);
subject.login(token);
  • subject.isAuthenticated():表示用户是经过身份验证登录的,即Subject.login()。
  • subject.isRemembered():表示用户是通过记住我登录的,此时可能是别人使用你的电脑,或你的cookie被窃取;与以上方法不会同时为true。

总结

  • RememberMe需要配合相应的拦截器使用,用错了拦截器可能就不满足你的需求了。
  • 代码示例:ideaProjects/shirochapter12
  • 《跟我学Shiro》第十三章

文章最后发布于: 2019-04-30 13:30:09

相关阅读

Shiro详解

Shiro 简介 简介• Apache Shiro 是 Java 的一个安全(权限)框架。• Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaS

Apache Shiro的用户授权isPermitted过程,导致jeesite

在使用jeesite快速开发平台时,出现权限授权失败。 开发项目中有个用户模块,取包名 user 模块。通过自动生成代码后,controller层自动

shiro 登陆成功后subject依然为空

shiro框架是一个强大的轻量级java安全框架。它提供了权限验证、加密、session管理的功能。shiro易用、上手快,应用场景大到企业级

Shiro的认证原理(Subject#login的背后故事)

登录操作一般都是我们触发的: Subject subject = SecurityUtils.getSubject(); AuthenticationToken authenticationToken = new

分享到:

栏目导航

推荐阅读

热门阅读