java sso单点登录框架_spring security 单点登录 ssm框架 sso

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第1张图片

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

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第2张图片

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第3张图片

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

UsernamePasswordAuthenticationToken 本质也是Authentication对象的原因了,下面我们点进去看看,会进入一个AuthenticationManager的接口中,这个接口的实现类ProviderManager提供了具体的认证方法,并最终确定

由哪种provider来处理该方式的认证,当前的认证是有AbstractUserDetailsAuthenticationProvider来处理的,那么接着往下看

0b5706d38c08e1fbc3c8da310a252198.png

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第4张图片

770d3bdbd60f946f1e935b930577eebd.png

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第5张图片

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第6张图片

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第7张图片

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

dfd971e8a0f347c687276a2d9712f992.png

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第8张图片

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第9张图片

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第10张图片

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第11张图片

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第12张图片

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

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第13张图片

5a230688fa93da744368bcc436902970.png

1f0985b47e2371f13a254973d768ce0a.png

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

7cb946c1edf2a7da06d7c7117bd33989.png

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第14张图片

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第15张图片

如果配置文件或配置类中开启remember-me,

,就会判断remember-me 有没有值,而且值的要求是否符合security的要求,默认remember是不开启的

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第16张图片

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第17张图片

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第18张图片

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第19张图片

f7e0603db3882bfc355cae337695f6c3.png

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第20张图片

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

java sso单点登录框架_spring security 单点登录 ssm框架 sso_第21张图片

你可能感兴趣的:(java,sso单点登录框架)