【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能

简介: 【二十八】springboot之通过threadLocal+参数解析器实现同session一样保存当前登录信息的功能


       在开发中,获取当前登录用户的功能是一个必须的功能,比如保存创建人、修改人等操作。以前通过session去set和get方法(每个方法的参数列表都需要加上HttpServletRequest request参数)或者类似springsecurity等框架实现获取当前登录人信息。下面我分享一个目前项目上使用的方式。

大致流程如下:

一、ThreadLocal

       线程局部变量,创建一个线程变量后,针对这个变量可以让每个线程拥有自己的变量副本,每个线程是访问的自己的副本,与其他线程的相互独立。

二、HandlerMethodArgumentResolver

       该接口用于预先处理请求参数,他有如下两个方法:

  • supportsParameter: 判断请求参数是否是支持该解析器(返回true表示支持,会继续调用resolveArgument方法,返回false表示不支持,参数解析结束不会继续调用resolveArgument方法)。
  • resolveArgument: 参数解析的具体实现逻辑,最后返回参数具体解析后封装的对象。

三、实战Demo

       1、拦截器

       模拟前端请求携带token,若传1,假设从缓存获取的用户信息是张三,否则是李四。并将用户信息塞入线程变量。

      2、全局用户类

       采用饿汉式单例模式

       3、自定义注解

       用于放在参数列表,判断某接口是否支持自定义参数解析器。

       4、自定义参数解析

       自定义参数解析类,集成HandlerMethodArgumentResolver接口,并重写他的两个方法,此处判断方法参数上是否包含我们的自定义注解,若包含则说明支持该解析器,返回true,进入下面的方法执行。

       重写的resolveArgument方法便将线程变量的值进行返回,返回到该注解对应的参数里面。

       5、配置

       编写配置类,继承WebMvcConfigurer接口,重写添加拦截器和添加参数解析器方法,将自定义的拦截器和解析器加上。

       6、测试

       测试两种方法获取当前登录用户信息。


目录
相关文章
|
2月前
|
人工智能 Java 开发者
【Spring】原理解析:Spring Boot 自动配置
Spring Boot通过“约定优于配置”的设计理念,自动检测项目依赖并根据这些依赖自动装配相应的Bean,从而解放开发者从繁琐的配置工作中解脱出来,专注于业务逻辑实现。
|
1月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
1月前
|
XML JSON Java
【SpringBoot(三)】从请求到响应再到视图解析与模板引擎,本文带你领悟SpringBoot请求接收全流程!
Springboot专栏第三章,从请求的接收到视图解析,再到thymeleaf模板引擎的使用! 本文带你领悟SpringBoot请求接收到渲染的使用全流程!
196 3
|
1月前
|
XML Java 应用服务中间件
【SpringBoot(一)】Spring的认知、容器功能讲解与自动装配原理的入门,带你熟悉Springboot中基本的注解使用
SpringBoot专栏开篇第一章,讲述认识SpringBoot、Bean容器功能的讲解、自动装配原理的入门,还有其他常用的Springboot注解!如果想要了解SpringBoot,那么就进来看看吧!
349 2
|
2月前
|
Java 数据库 数据安全/隐私保护
Spring Boot四层架构深度解析
本文详解Spring Boot四层架构(Controller-Service-DAO-Database)的核心思想与实战应用,涵盖职责划分、代码结构、依赖注入、事务管理及常见问题解决方案,助力构建高内聚、低耦合的企业级应用。
779 1
|
4月前
|
前端开发 Java 数据库连接
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
SpringBoot参数校验底层原理和实操。深度历险、深度解析(图解+秒懂+史上最全)
|
4月前
|
机器学习/深度学习 XML Java
【spring boot logback】日志logback格式解析
在 Spring Boot 中,Logback 是默认的日志框架,它支持灵活的日志格式配置。通过配置 logback.xml 文件,可以定义日志的输出格式、日志级别、日志文件路径等。
753 5
|
4月前
|
Java 关系型数据库 数据库连接
Spring Boot项目集成MyBatis Plus操作PostgreSQL全解析
集成 Spring Boot、PostgreSQL 和 MyBatis Plus 的步骤与 MyBatis 类似,只不过在 MyBatis Plus 中提供了更多的便利功能,如自动生成 SQL、分页查询、Wrapper 查询等。
401 3
|
4月前
|
缓存 前端开发 Java
SpringBoot 实现动态菜单功能完整指南
本文介绍了一个动态菜单系统的实现方案,涵盖数据库设计、SpringBoot后端实现、Vue前端展示及权限控制等内容,适用于中后台系统的权限管理。
424 1

推荐镜像

更多
  • DNS
  • 下一篇
    oss云网关配置