首页 > 其他分享 >六、Spring Boot集成Spring Security之前后分离项目认证流程最佳方案

六、Spring Boot集成Spring Security之前后分离项目认证流程最佳方案

时间:2024-11-08 22:15:09浏览次数:3  
标签:Spring 流程 Boot 认证 token Security 上下文

文章目录

往期回顾:Spring Boot集成Spring Security专栏及各章节快捷入口

前言

本文介绍前后分离认证最佳方案,配合以下内容观看效果更佳!!!

一、Spring Security默认认证流程及其优缺点

1、Spring Security默认认证流程总结

四、Spring Boot集成Spring Security之认证流程详细介绍了认证流程,其核心流程如下

  1. SecurityContextPersistenceFilter:chain.doFilter()前从安全上下文仓库中获取安全上下文,未登录状态时获取未认证的安全上下文;chain.doFilter()后从安全上下文持有者中获取安全上下文并更新到安全上下文仓库中
  2. LogoutFilter:如果是登出请求,清除安全上下文认证信息并重定向到登录页面,否则不处理
  3. UsernamePasswordAuthenticationFilter:如果是登录请求,校验请求参数中的用户名密码,校验成功后生成新的已认证的安全上下文并保存到安全上下文仓库中后重定向到目标URL,否则不处理
  4. DefaultLoginPageGeneratingFilter:如果是登录页面请求,返回默认登录页面,否则不处理
  5. DefaultLogoutPageGeneratingFilter:如果是登出页面请求,返回默认登出页面,否则不处理

2、优缺点

  1. 提供了完整的安全的认证流程
  2. 默认基于session实现非前后分离项目的认证流程,该流程已经慢慢退出历史舞台
  3. 未提供前后分离认证流程

二、前后分离项目认证思路

1、前后分离项目认证流程(基于默认流程优化)

  1. 前端输入用户名密码提交到后端
  2. 后端获取到用户名密码并校验,校验成功后生成token(类似于sessionId)返回给前端,生成已认证的安全上下文(类似于session)存储到安全上下文仓库中
  3. 前端获取到token,后续每次请求的请求头中都携带该token(类似于cookie)
  4. 后端获取请求头中的token,通过token获取安全上下文,并设置到安全上下文持有者中
  5. 前端提交退出请求时,后端获取请求头中的token,并通过token删除安全上下文仓库中安全上下文

2、前后分离项目认证流程关键组件对应的默认实现

从前后分离项目认证流程可以看出有四个关键组件

  1. 每次请求时通过请求头中token从安全上下文仓库中获取安全上下文的过滤器(默认SecurityContextPersistenceFilter)
  2. 登出时通过请求头中的token从安全上下文仓库中清除安全上下文的过滤器(默认LogoutFilter)
  3. 登录时验证用户名密码并生成token和安全上下文,将安全上下文添加到安全上下文仓库中的过滤器(默认UsernamePasswordAuthenticationFilter)
  4. 安全上下文仓库(默认HttpSessionSecurityContextRepository)

3、默认实现的局限性

  1. UsernamePasswordAuthenticationFilter从form表单中获取请求参数,不符合RESTFUL开发规范
  2. 认证的关键组件AuthenticationManager未注入到Spring容器中,导致自定义认证过滤器无法直接从Spring容器中获取
  3. UsernamePasswordAuthenticationFilter只实现了认证部分,认证成功后生成的安全上下文并添加安全上下文仓库中过程无法控制,只能使用默认的HttpSession或RequestAttributes方式,无法自定义

4、整改思路

  1. 自定义SecurityContextRepositoryImpl实现安全上下文仓库SecurityContextRepository,实现基于分布式缓存的安全上下文仓库
  2. 自定义RestfulUsernamePasswordAuthenticationFilter继承AbstractAuthenticationProcessingFilter,实现符合RESTFUL开发规范的登录方式
  3. 自定义UserDetailsImpl实现UserDetails接口,方便添加自定义属性
  4. 自定义UserDetailsServiceImpl实现UserDetailsService接口,实现基于数据库的认证方式,并生成token设置到UserDetails中

5、整改后的认证流程

  1. 前端输入用户名密码提交到后端
  2. 后端AbstractAuthenticationProcessingFilter调用子类RestfulUsernamePasswordAuthenticationFilter的attemptAuthentication方法获取认证信息
  3. RestfulUsernamePasswordAuthenticationFilter获取请求中的用户名密码,并调用UserDetailsService的loadUserByUsername获取用户信息
  4. UserDetailsServiceImpl通过用户名查询用户,将用户信息设置到创建的UserDetailsImpl对象中,生成token设置到UserDetailsImpl对象中
  5. AbstractAuthenticationProcessingFilter调用SecurityContextRepositoryImpl保存安全上下文
  6. SecurityContextRepositoryImpl获取安全上下文及其认证信息中的token,将token和安全上下文添加到分布式缓存中
  7. 将token返回到前端
  8. 前端获取token,每次请求时都在请求头中携带该token
  9. SecurityContextPersistenceFilter/SecurityContextHolderFilter调用SecurityContextRepositoryImpl的loadContext获取安全上下文
  10. SecurityContextRepositoryImpl获取请求头中token,使用token从分布式缓存中获取安全上下文并返回
  11. 前端提交登出请求
  12. LogoutFilter调用SecurityContextRepositoryImpl的saveContext,其中参数安全上下文为空值安全上下文
  13. SecurityContextRepositoryImpl判断出空值安全上下文,获取请求头中的token,使用token删除分布式缓存中获取安全上下文

三、总结

1、设计前后分离项目认证流程原则

  1. 尽可能贴合原生Spring Security处理流程,尽量使用Spring Security提供的组件
  2. 接口设计符合RESTFUL接口规范
  3. 使用分布式缓存存储登录凭证,更适合分布式项目

2、其他说明

  1. 这里说的前后分离项目认证流程最佳方案,是个人认为的最佳方案,并非行业公认的最佳方案,一千个读者就有一千个哈姆雷特,欢迎在评论区或者私信讨论你心中的最佳方案
  2. 七、Spring Boot集成Spring Security之前后分离认证最佳实现,已实现该方案,请前往查看

标签:Spring,流程,Boot,认证,token,Security,上下文
From: https://blog.csdn.net/dhbfjh/article/details/143511565

相关文章

  • flask基于SpringBoot的婚庆策划系统的设计与实现(毕设源码+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景随着社会经济的发展和人们生活水平的提高,婚庆行业日益繁荣。关于婚庆策划的研究,现有研究主要以婚庆服务的具体项目如会场布置、婚礼流......
  • SpringBoot校园跳蚤市场管理系统i940j(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景随着校园内二手交易的日益频繁,一个高效、便捷的校园跳蚤市场管理系统显得尤为重要。该系统旨在为学生提供一个安全、可靠的二手交易平......
  • 基于Java+SpringBoot心理测评心理测试系统功能实现八
    一、前言介绍:1.1项目摘要心理测评和心理测试系统在当代社会中扮演着越来越重要的角色。随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态、诊断心理问题、制定心理治疗方案的工具,其需求和应用范围不断扩大。首先,现代社会节奏快速,竞争激烈,人们面临着来......
  • 一文彻底弄懂Spring Boot的启动过程
    一,SpringBoot启动过程1.启动入口SpringBoot应用的启动入口通常是一个包含@SpringBootApplication注解的主类,并调用SpringApplication.run()方法。@SpringBootApplication是一个复合注解,包含了@Configuration、@EnableAutoConfiguration和@ComponentScan,从而开启了自......
  • 基于Java+SpringBoot心理测评心理测试系统功能实现七
    一、前言介绍:1.1项目摘要心理测评和心理测试系统在当代社会中扮演着越来越重要的角色。随着心理健康问题日益受到重视,心理测评和心理测试系统作为评估个体心理状态、诊断心理问题、制定心理治疗方案的工具,其需求和应用范围不断扩大。首先,现代社会节奏快速,竞争激烈,人们面临着来......
  • 【25届计算机毕设选题推荐】基于springboot个人公务员考试管理系统的设计与实现 【附
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • 【计算机毕业设计选题推荐】基于springboot高校网上缴费综合务系统的设计与实现 【附
    ✍✍计算机毕设编程指导师**⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流!⚡⚡Java、Python、小程序、大数据实战项目集⚡⚡文末获取......
  • springboot毕设 乐校园二手书交易管理系统 程序+论文
    本系统(程序+源码)带文档lw万字以上文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景在当今环保意识日益增强的社会背景下,资源的循环利用已成为社会各界关注的焦点。大学校园作为知识与文化的聚集地,每年都会有大量的二手书籍在毕业季被......
  • 基于SpringBoot+Vue的装饰工程管理系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:         大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的装饰工程管理系统,项目源码请点击文章末尾联系我哦~目前有各类成......
  • 基于SpringBoot+Vue的卓越导师双选管理系统设计与实现毕设(文档+源码)
            目录一、项目介绍二、开发环境三、功能介绍四、核心代码五、效果图六、源码获取:         大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的卓越导师双选管理系统,项目源码请点击文章末尾联系我哦~目前有各......