Shiro学习笔记——remember me

认证和记住我的区别

  • 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失效,即需要重新登录。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Shiro的经典RememberMe功能是一个基于cookie的身份认证机制。它允许用户在登录后保持身份认证的状态,即使用户关闭了浏览器或重新启动了系统。 RememberMe功能的实现原理是,当用户登录成功时,服务器会生成一个唯一的标识符(记为token),然后将该标识符存储在用户浏览器的cookie。下次用户访问需要认证的页面时,服务器会检查该cookie的标识符,并使用它来自动登录用户,而无需用户再次输入用户名和密码。 需要注意的是,RememberMe功能是基于cookie的,因此它依赖于浏览器对cookie的支持。如果用户禁用了cookie或者清除了浏览器的cookie,那么RememberMe功能将失效,用户需要重新输入用户名和密码进行认证。 在Shiro,开启RememberMe功能非常简单。只需要在Shiro的配置文件添加相应的配置即可。例如,可以通过在shiro.ini文件添加如下配置启用RememberMe功能: ``` [main] # ... 其他配置 # 启用RememberMe rememberMe = org.apache.shiro.web.mgt.CookieRememberMeManager rememberMe.cookie = rememberMe rememberMe.cipherKey = kPH+bIxk5D2deZiIxcaaaA== [users] # ... 用户信息配置 ``` 其,`rememberMe.cookie`指定了cookie的名称,`rememberMe.cipherKey`指定了加密密钥。这些配置可以根据实际需求进行修改。 总结起来,Shiro的经典RememberMe功能通过使用cookie来实现用户的自动登录,提供了便利的用户体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值