使用springSecurity完成快速登录

一、项目需求

这里的项目分为管理端和客户端,要求管理端在客户端用户列表可以一键跳转客户端并且能够免密登录该账户

二、解决思路

1.我们这里的框架是springSecurity,首先想到的是能不能在后台直接走一遍登录的流程,获取到token,再由前端拿着这个token来进行跳转。

故而我们的切入点就是鉴权这一块了,springSecurity 有个 AbstractAuthenticationProcessingFilter 抽象类

(AbstractAuthenticationProcessingFilter 的职责也就非常明确:处理所有HTTP Request和Response对象,并将其封装成AuthenticationMananger可以处理的Authentication。并且在身份验证成功或失败之后将对应的行为转换为HTTP的Response,同时还要处理一些Web特有的资源比如Session和Cookie。)

2.集成之后重写 attemptAuthentication(鉴权并生成Authentication),获取HttpServletRequest中前端传来对应的userId,然后再 new UserAuthentication(),完成该方法

3.但此时是有两个问题的 , 一个是 我们怎么知道是哪个接口应该这么处理 ,第二个就是我们怎么能确定是正常登陆鉴权还是快速登录。

这里跟我们需要用到的几个类起个名字 WebSecurityConfigurerAdapter 的子类 为 类A ,

快速登录获取Authentication 为 类B ,普通登录获取Authentication 为 类C ,类B和类C 继承 接口BC ,继承AbstractAuthenticationProcessingFilter 为 类D

我们可以使用设计模式(具体不清楚,以后学完了可以补),定义一个 接口BC,并在 类D 的attemptAuthentication方法获取Authentication(那我们怎么知道是哪个实现类呢?)

WebSecurityConfigurerAdapter 是 springSecurity 的 配置类 ,我们继承他生成 类A 并重写 configure 方法 ,并在configure 方法 中获取 所有实现 接口BC 的类,遍历他们,将其作为参数扔到 类D 中 ,同时 类D 继承完AbstractAuthenticationProcessingFilter 后的构造方法可以根据路径 进行过滤,这时我们只需要在 接口BC 定义一个获取 登录路径的接口,就完美解决了这个两个问题。

三、总结

我们 在 AbstractAuthenticationProcessingFilter 过滤器中重写鉴权 , 并通过 配置WebSecurityConfigurerAdapter ,指定不同路径做不同的鉴权 ,最后生成 Authentication 。

相关推荐
shushangyun_14 分钟前
2026智能采购商城系统选型指南:如何引领企业数字化采购升级
java·大数据·数据库·人工智能·机器学习
她说..17 分钟前
Java 默认值设置方式
java·开发语言·后端·springboot
学渣超1 小时前
记一次分布式事务数据不一致的排查之旅:从超时到索引,层层剥茧
java·后端·架构
掉鱼的猫1 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·llm·aigc
带刺的坐椅1 小时前
Agent Harness 实战指南:构建生产级 AI Agent 的"马具"框架
java·ai·llm·agent·solon-ai
c238561 小时前
互斥锁高频面试题全解:从基础概念到底层实现,一文通关
java·c++·面试·职场和发展
error:(2 小时前
【系统与实战双精通】VS Code 调试 ROS2 Python 节点与 Launch 系统指南
android·java·python
Tian_Hang2 小时前
Eclipse Ditto 的权限策略
java·服务器·前端·网络·ide·ubuntu·eclipse
小蓝波3 小时前
docker 的命令
java·docker·容器
AI人工智能+电脑小能手3 小时前
【大白话说Java面试题 第155题】【06_Spring篇】第15题:Spring 如何解决循环依赖问题?
java·spring·循环依赖·三级缓存·aop代理