spring security 单点登录 ssm框架 sso

security登录的拦截器为 UsernamePasswordAuthenticationFilter ,其中这里默认登录访问接口为/login,且为post请求方式  

 

 

 , attemptAuthentication ( ) 这个方法就是认证方法,最终会将客户端传来的username 和 password 封装成,UsernamePasswordAuthenticationToken 对象,该对象本质也是Authentication对象,

因为UsernamePasswordAuthenticationToken继承了AbstractAuthenticationToken,而AbstractAuthenticationToken实现了Authentication

 

 

 在UsernamePasswordAuthenticationFilter 的认证方法最后一行代码为 this.getAuthenticationManager().authenticate(authRequest);,这里就是需要传入一个Authentication对象及其子类,这也是我为什么解释

UsernamePasswordAuthenticationToken 本质也是Authentication对象的原因了,下面我们点进去看看,会进入一个AuthenticationManager的接口中,这个接口的实现类ProviderManager提供了具体的认证方法,并最终确定
由哪种provider来处理该方式的认证,当前的认证是有AbstractUserDetailsAuthenticationProvider来处理的,那么接着往下看

 

 

 

 

 

 下面我们先看看 retrieveUser( )是如何通过用户名来查找数据库的,这个方法是由DaoAuthenticationProvider实现类来具体实现的,下面代码分析

 

 

 我们自己定义的UserServiceImpl实现重现 loadUserByUsername( ) 方法,如下

 

 

 用户查到之后我们需要判断用户的状态,下面接着看 preAuthenticationChecks.check(user);

 

 

 

 

 

 当用户状态都符合,且为一个正常用户时,security就会进行密码校验,下面接着看this.additionalAuthenticationChecks(user, (UsernamePasswordAuthenticationToken)authentication);

 

 

 

 

 到此就完成了所有的认证,这时security就会把认证后的对象放入securityContext域中,重新生成一个UsernamePasswordAuthenticationToken对象,设置它的认证状态为true,并跳转我们在配置文件中或配置类中指定成功后要跳转的页面或接口

default-target-url="/index.jsp"

 

 

 

 

 认证成功后的业务逻辑处理

 

 当我们选择了remeberMe时,security会生成一个token放入到客户端的cookie中

 

 

 

如果配置文件或配置类中开启remember-me,
<security:remember-me token-validity-seconds="60"></security:remember-me> ,就会判断remember-me 有没有值,而且值的要求是否符合security的要求,默认remember是不开启的

 

 如果选择了remember-me则由TokenBasedRememberMeServices这个类去处理, 生成remember-me的token 后,可以选择直接设置cookie返回给客户端

 

 

 

 

 也可以选择持久化token,同时设置cookie响应到客户端,这是由 PersistentTokenBasedRememberMeServices所实现

 

 

 

 

 

 

 如果我们没有选择remember-me ,将由NullRememberMeServices来直接处理响应

 

 

 

 

 

 

posted @   java小白百百  阅读(995)  评论(0编辑  收藏  举报
编辑推荐:
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示