Shiro学习笔记——remember me

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012525096/article/details/82761827

认证和记住我的区别

  • subject.isAuthenticated(),表示用户进行了身份验证登录的,即使用subject.login进行了登录。
  • subject.isRemebered(),表示用户是通过记住我登录的,此时可能并不是真正的你(如你的朋友使用你的电脑,或者你的cookie被窃取)在访问的。
  • 两者二选一,即subject.isAuthenticated()==true,则subject.isRemembered()==false,反之一样,两个状态只能选一个。

建议

  1. 访问一般网页,如个人在主页之类的,我们使用user拦截器即可,user拦截器只要用户登录。(isRemembered() || isAuthenticated())过即可访问成功。
  2. 访问特殊网页,如我的订单,提交订单页面,我们使用authc拦截器即可,authc拦截器会判断用户是否是通过Subject.login(isAuthenticated()==true)登录的,如果是才放行,否则会跳转到登录页面叫你重新登录。

测试

在这里插入图片描述
(1)打开浏览器,登录,访问list.jsp成功,访问admin.jsp成功。
(2)关闭浏览器。
(3)打开浏览器,访问list.jsp成功,访问admin.jsp失败,跳转至登录界面。

RememberMeManager

RememberMe通过这个Bean进行管理,其中有一些可配置的参数。
例如:

    <bean id="securityManager"
        class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="cacheManager" ref="cacheManager" />
        <property name="authenticator" ref="authenticator"></property>
        <property name="realms">
            <list>
                <ref bean="jdbcRealm"></ref>
                <ref bean="secondRealm"></ref>
            </list>
        </property>
        <property name="rememberMeManager.cookie.maxAge" value="10">
        </property>

最后一行设置了Cookie的最长有效期,10秒后Cookie失效,即需要重新登录。

猜你喜欢

转载自blog.csdn.net/u012525096/article/details/82761827
me