Shiro - RememberMe记住我功能实现

简介: Shiro - RememberMe记住我功能实现

【1】认证和记住我

① 记住我

Shiro提供了记住我(RememberMe)的功能,比如访问如淘宝等一些网站时,关闭了浏览器,下次再打开时还是能记住你是谁,下次访问时无需再登录即可访问,基本流程如下:

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

② 认证

subject.isAuthenticated() 表示用户进行了身份验证登录的,即使用Subject.login进行了登录。

subject.isRemembered()表示用户是通过记住我登录的,此时可能并不是真正的你(如你的朋友使用你的电脑,或者你的cookie 被窃取)在访问的。


③ 建议

访问一般网页:如个人在主页之类的,我们使用user 拦截器即可,user 拦截器只要用户登录(isRemembered() || isAuthenticated())过即可访问成功。

访问特殊网页:如我的订单,提交订单页面,我们使用authc拦截器即可,authc拦截器会判断用户是否是通过Subject.login(isAuthenticated()==true)登录的,如果是才放行,否则会跳转到登录页面叫你重新登录。



【2】实现记住我功能

如果要自己做RememeberMe,代码实例如下:

 UsernamePasswordToken token = new UsernamePasswordToken(userName, password);
 token.setRememberMe(true);

XML配置如下:

  <bean id="rememberMeCookie" class="org.apache.shiro.web.servlet.SimpleCookie">
    <constructor-arg value="rememberMe"/>
    <property name="httpOnly" value="true"/>
    <!-- 30天-->
    <property name="maxAge" value="2592000"/>
  </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>
   <!-- 安全管理器 -->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!-- 注入缓存管理器 -->
        <property name="cacheManager" ref="cacheManager"/>
        <property name="authenticator" ref="authenticator" />
        <property name="realms">
          <list>
          <ref bean="customRealm"/>
        </list>
        </property>
        <property name="sessionManager" ref="sessionManager" />
        <property name="rememberMeManager" ref="rememberMeManager" />
    </bean>

你可能需要在登录页面添加一个记住我复选框,根据该复选框的状态在后台判断是否设置token.setRememberMe(true);


Shiro完整配置与项目地址:GitHub-Shiro下载

【3】如果前后端分离呢?

在前后端分离的项目中,ajax跨域和保存用户信息是其中的重点和难点。

如果在后台使用shiro框架来进行权限控制,就需要用到cookie+session的模式来保存用户的信息。



目录
相关文章
|
Java Spring 容器
Spring的AOP失效场景详解
Spring的AOP失效场景详解
1932 0
|
缓存 NoSQL Java
【JetCache】JetCache的使用方法与步骤
【JetCache】JetCache的使用方法与步骤
8359 1
|
SQL 监控 Java
分布式任务调度之xxl-job
分布式任务调度之xxl-job
|
人工智能 安全 Dubbo
Spring AI 智能体通过 MCP 集成本地文件数据
MCP 作为一款开放协议,直接规范了应用程序如何向 LLM 提供上下文。MCP 就像是面向 AI 应用程序的 USB-C 端口,正如 USB-C 提供了一种将设备连接到各种外围设备和配件的标准化方式一样,MCP 提供了一个将 AI 模型连接到不同数据源和工具的标准化方法。
5667 100
|
前端开发 Java Apache
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
本文详细讲解了如何整合Apache Shiro与Spring Boot项目,包括数据库准备、项目配置、实体类、Mapper、Service、Controller的创建和配置,以及Shiro的配置和使用。
3349 2
Springboot整合shiro,带你学会shiro,入门级别教程,由浅入深,完整代码案例,各位项目想加这个模块的人也可以看这个,又或者不会mybatis-plus的也可以看这个
|
SQL JSON 前端开发
若依RuoYi脚手架二次开发教程(二次开发必学技能)
本次我们将通过一个菜品管理模块开发的案例,来演示拿到若依框架后,如何在若依管理系统上进行二次开发,升级改造为自己的管理系统。适合以若依作为项目脚手架的公司开发人员、毕业设计的学生及开源项目学习者。
7974 1
若依RuoYi脚手架二次开发教程(二次开发必学技能)
|
SQL Java 数据库连接
如何在 Java 代码中使用 JSqlParser 解析复杂的 SQL 语句?
大家好,我是 V 哥。JSqlParser 是一个用于解析 SQL 语句的 Java 库,可将 SQL 解析为 Java 对象树,支持多种 SQL 类型(如 `SELECT`、`INSERT` 等)。它适用于 SQL 分析、修改、生成和验证等场景。通过 Maven 或 Gradle 安装后,可以方便地在 Java 代码中使用。
4120 11
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
本文介绍了如何在Spring Boot项目中集成Swagger 2.x和3.0版本,并提供了解决Swagger在Spring Boot中启动失败问题“Failed to start bean ‘documentationPluginsBootstrapper’; nested exception is java.lang.NullPointerEx”的方法,包括配置yml文件和Spring Boot版本的降级。
springboot 集成 swagger 2.x 和 3.0 以及 Failed to start bean ‘documentationPluginsBootstrapper‘问题的解决
|
Java Linux
终于有人把内网centos安装libreoffice步骤说清楚了
终于有人把内网centos安装libreoffice步骤说清楚了
2322 2