引入

@EnableOAuth2Client
@EnableConfigurationProperties(OAuth2SsoProperties.class)
@Import({ OAuth2SsoDefaultConfiguration.class, OAuth2SsoCustomConfiguration.class,ResourceServerTokenServicesConfiguration.class })
public @interface EnableOAuth2Sso {}

EnableOAuth2Sso注解引入了3个配置类:OAuth2SsoDefaultConfigurationOAuth2SsoCustomConfigurationResourceServerTokenServicesConfiguration和一个属性类OAuth2SsoProperties

OAuth2SsoProperties

OAuth2SsoProperties 主要用于设置单点登录login path。

@ConfigurationProperties(prefix = "security.oauth2.sso")
public class OAuth2SsoProperties {public static final String DEFAULT_LOGIN_PATH = "/login";
}

ResourceServerTokenServicesConfiguration

ResourceServerTokenServicesConfiguration用于引入资源服务,token服务的配置信息。

OAuth2SsoDefaultConfiguration

OAuth2SsoDefaultConfiguration实现WebSecurityConfigurerAdapter。所有资源都需要验证。

同时引入了配置SsoSecurityConfigurer

 @Overrideprotected void configure(HttpSecurity http) throws Exception {http.antMatcher("/**").authorizeRequests().anyRequest().authenticated();new SsoSecurityConfigurer(this.applicationContext).configure(http);}

SsoSecurityConfigurer

SsoSecurityConfigurer引入了OAuth2ClientAuthenticationProcessingFilter

     @Overridepublic void configure(HttpSecurity builder) throws Exception {OAuth2ClientAuthenticationProcessingFilter ssoFilter = this.filter;ssoFilter.setSessionAuthenticationStrategy(builder.getSharedObject(SessionAuthenticationStrategy.class));builder.addFilterAfter(ssoFilter, AbstractPreAuthenticatedProcessingFilter.class);}

OAuth2ClientAuthenticationProcessingFilter

OAuth2ClientAuthenticationProcessingFilter过滤器 其要完成的工作就是 通过获取到的code码调用 授权服务 /oauth/token 接口获取 token 信息,并将获取到的token 信息解析成 OAuth2Authentication 认证对象。

 @Overridepublic Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response)throws AuthenticationException, IOException, ServletException {OAuth2AccessToken accessToken;try {accessToken = restTemplate.getAccessToken();} catch (OAuth2Exception e) {BadCredentialsException bad = new BadCredentialsException("Could not obtain access token", e);publish(new OAuth2AuthenticationFailureEvent(bad));throw bad;           }try {OAuth2Authentication result = tokenServices.loadAuthentication(accessToken.getValue());if (authenticationDetailsSource!=null) {request.setAttribute(OAuth2AuthenticationDetails.ACCESS_TOKEN_VALUE, accessToken.getValue());request.setAttribute(OAuth2AuthenticationDetails.ACCESS_TOKEN_TYPE, accessToken.getTokenType());result.setDetails(authenticationDetailsSource.buildDetails(request));}publish(new AuthenticationSuccessEvent(result));return result;}catch (InvalidTokenException e) {BadCredentialsException bad = new BadCredentialsException("Could not obtain user details from token", e);publish(new OAuth2AuthenticationFailureEvent(bad));throw bad;         }}

OAuth2SsoCustomConfiguration

OAuth2SsoCustomConfiguration用于给ProxyFactory增加AOP

public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException {if (this.configType.isAssignableFrom(bean.getClass()) && bean instanceof WebSecurityConfigurerAdapter) {ProxyFactory factory = new ProxyFactory();factory.setTarget(bean);factory.addAdvice(new SsoSecurityAdapter(this.applicationContext));bean = factory.getProxy();}return bean;}
private static class SsoSecurityAdapter implements MethodInterceptor {private SsoSecurityConfigurer configurer;SsoSecurityAdapter(ApplicationContext applicationContext) {this.configurer = new SsoSecurityConfigurer(applicationContext);}@Overridepublic Object invoke(MethodInvocation invocation) throws Throwable {if (invocation.getMethod().getName().equals("init")) {Method method = ReflectionUtils.findMethod(WebSecurityConfigurerAdapter.class, "getHttp");ReflectionUtils.makeAccessible(method);HttpSecurity http = (HttpSecurity) ReflectionUtils.invokeMethod(method, invocation.getThis());this.configurer.configure(http);}return invocation.proceed();}}

Spring Security OAuth2源码解析(三)——单点登录。相关推荐

  1. Spring Security OAuth2源码解析(一)

    目录 引入 AuthorizationServerEndpointsConfiguration 属性 AuthorizationEndpoint OAuth2RequestFactory Defaul ...

  2. Spring Security OAuth2源码解析(二)

    鉴权服务器对客户端鉴权之后,会生成token,客户端使用token,就可以去资源服务器获取资源. @EnableResourceServer  @Import(ResourceServerConfig ...

  3. Spring Security Oauth2 授权码模式下 自定义登录、授权页面

    主要说明:基于若依springcloud微服务框架的2.1版本 嫌弃缩进不舒服的,直接访问我的博客站点: http://binarydance.top//aticle_view.html?aticle ...

  4. JWT实战 Spring Security Oauth2整合JWT 整合SSO单点登录

    文章目录 一.JWT 1.1 什么是JWT 1.2 JWT组成 头部(header) 载荷(payload) 签名(signature) 如何应用 1.3 JJWT 快速开始 创建token toke ...

  5. 单点登录 cas 设置回调地址_cas客户端流程详解(源码解析)单点登录

    博主之前一直使用了cas客户端进行用户的单点登录操作,决定进行源码分析来看cas的整个流程,以便以后出现了问题还不知道是什么原因导致的 cas主要的形式就是通过过滤器的形式来实现的,来,贴上示例配置: ...

  6. Spring 之 @Cacheable 源码解析(下)

    CacheInterceptor 缓存切面处理逻辑 接着上篇 Spring 之 @Cacheable 源码解析(上) 说起,代理对象已经创建成功,接着分析调用流程.那么应该从哪里入手呢?当然是去看 A ...

  7. spring aop 注入源码解析

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  8. spring aop 注入源码解析 1

    spring aop 注入源码解析 aop启动 AbstractApplicationContext.java @Overridepublic void refresh() throws BeansE ...

  9. Spring 之 @Cacheable 源码解析(上)

    一.@EnableCaching 源码解析 当要使用 @Cacheable 注解时需要引入 @EnableCaching 注解开启缓存功能.为什么呢?现在就来看看为什么要加入 @EnableCachi ...

最新文章

  1. js动态创建html控件,通过JS动态添加html控件后,添加样式以及OnClick
  2. windows 安装metis_Eigen+suitesparse for windows 安装
  3. tilecache2.11在windows apache2.22安装部署
  4. Boostrap技能点整理之【bootstrap简介】
  5. linux hal 结构图
  6. 怎么轻松学JAVA(三个月拿实习Offer):小猿的JAVA后端之路(持续更新)
  7. 老婆生病了,后果很严重!
  8. 应力循环次数60ant_齿轮应力循环次数公式
  9. Unity3D关于iTween知识详解和接口总结
  10. 固态硬盘量产工具_固态硬盘测速工具CDM更新8.0版,但我们不推荐你使用
  11. Ionic页面的生命周期 (事件)
  12. 手机支付宝服务器安全证书安装不了,手机上如何安装支付宝的安全证书?
  13. 拥有多丽体质特膳 你也能和女神般光彩照人
  14. 翟菜花:搭上营销快通车的乳业,又是如何玩转互联网营销时代的?
  15. 开始自学PHP之路3(HTML)
  16. matlab trangle,Triangle-of-Point-Cloud Matlab 三维点云三角化 不是平面域的三角化 是三维点云三角化 亲身测试绝对可用! - 下载 - 搜珍网...
  17. Android手电筒案例
  18. CAD 查找指定部件数量
  19. Linux下用火焰图进行性能分析
  20. windows重装系统

热门文章

  1. Mysql 去除 特定字符后面的所有字符串
  2. 给选择模型的子模型添加COL
  3. 如何判断一个字符串的编码类型?
  4. LOJ#2542 随机游走
  5. 智能安防新时代:用户、SI、设备制造商要做什么?
  6. windows7旗舰版系统自带组件IIS搭建ftp
  7. 如何使Putty会话颜色更美观
  8. 鼠标右击 左击 等总结
  9. 转如何限制文本框只能输入数字,小数点,英文,汉字等各类代码
  10. 计算机的病毒防治教案,计算机病毒及其防治教案.doc