当前位置:网站首页>OAuth Client默认配置加载
OAuth Client默认配置加载
2022-08-11 08:15:00 【InfoQ】
前言
配置文件加载
spring:
security:
oauth2:
client:
registration:
gitee:
client-id: gitee-client-id
client-secret: gitee-client-secret
authorization-grant-type: authorization_code
redirect-uri: '{baseUrl}/login/oauth2/code/{registrationId}'
client-name: Gitee
github:
client-id: b4713d47174917b34c28
client-secret: 898389369c2e9f3d1d0ff4543ba1d9b45adfd093
provider:
gitee:
authorization-uri: https://gitee.com/oauth/authorize
token-uri: https://gitee.com/oauth/token
user-info-uri: https://gitee.com/api/v5/user
user-name-attribute: name
OAuth2ClientProperties
@ConfigurationProperties

OAuth2ClientRegistrationRepositoryConfiguration
InMemoryClientRegistrationRepository
@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(OAuth2ClientProperties.class)
@Conditional(ClientsConfiguredCondition.class)
class OAuth2ClientRegistrationRepositoryConfiguration {
@Bean
@ConditionalOnMissingBean(ClientRegistrationRepository.class)
InMemoryClientRegistrationRepository clientRegistrationRepository(OAuth2ClientProperties properties) {
List<ClientRegistration> registrations = new ArrayList<>(
OAuth2ClientPropertiesRegistrationAdapter.getClientRegistrations(properties).values());
return new InMemoryClientRegistrationRepository(registrations);
}
}
OAuth2ClientProperties
ClientsConfiguredCondition
InMemoryClientRegistrationRepository
ClientRegistrationRepository
OAuth2ClientProperties
ClientRegistration
InMemoryClientRegistrationRepository
OAuth2ClientRegistrationRepositoryConfiguration
OAuth2ClientAutoConfiguration
OAuth2WebSecurityConfiguration
OAuth2ClientAutoConfiguration
OAuth2ClientRegistrationRepositoryConfiguration
OAuth2WebSecurityConfiguration
InMemoryOAuth2AuthorizedClientService
OAuth2AuthorizedClientRepository
SecurityFilterChain
InMemoryOAuth2AuthorizedClientService
OAuth2AuthorizedClientService
ClientRegistrationRepository
ClientRegistrationRepository
findByRegistrationId
InMemoryClientRegistrationRepository
AuthenticatedPrincipalOAuth2AuthorizedClientRepository
OAuth2AuthorizedClientRepository
principal
HttpSessionOAuth2AuthorizedClientRepository
SecurityFilterChain
@Bean
SecurityFilterChain oauth2SecurityFilterChain(HttpSecurity http) throws Exception {
http.authorizeRequests((requests) -> requests.anyRequest().authenticated());
http.oauth2Login(Customizer.withDefaults());
http.oauth2Client();
return http.build();
}
public final O build() throws Exception {
if (this.building.compareAndSet(false, true)) {
this.object = doBuild();
return this.object;
}
throw new AlreadyBuiltException("This object has already been built");
}
protected final O doBuild() throws Exception {
synchronized (this.configurers) {
//标记构建状态
this.buildState = BuildState.INITIALIZING;
//加载配置前的处理,默认空实现,子类可以覆盖实现
beforeInit();
//加载配置
init();
//修改构建状态
this.buildState = BuildState.CONFIGURING;
//在开始配置之前的处理
beforeConfigure();
//开始配置,调用实现了SecurityConfigurer的configure()
//在这里会将各种内置的过滤器添加到HttpSecurity中
configure();
this.buildState = BuildState.BUILDING;
//开始构建要返回的对象,抽象返回,子类实现构建逻辑
O result = performBuild();
this.buildState = BuildState.BUILT;
return result;
}
}
protected DefaultSecurityFilterChain performBuild() {
ExpressionUrlAuthorizationConfigurer<?> expressionConfigurer = getConfigurer(
ExpressionUrlAuthorizationConfigurer.class);
AuthorizeHttpRequestsConfigurer<?> httpConfigurer = getConfigurer(AuthorizeHttpRequestsConfigurer.class);
boolean oneConfigurerPresent = expressionConfigurer == null ^ httpConfigurer == null;
Assert.state((expressionConfigurer == null && httpConfigurer == null) || oneConfigurerPresent,
"authorizeHttpRequests cannot be used in conjunction with authorizeRequests. Please select just one.");
this.filters.sort(OrderComparator.INSTANCE);
List<Filter> sortedFilters = new ArrayList<>(this.filters.size());
for (Filter filter : this.filters) {
sortedFilters.add(((OrderedFilter) filter).filter);
}
return new DefaultSecurityFilterChain(this.requestMatcher, sortedFilters);
}
DisableEncodeUrlFilter
WebAsyncManagerIntegrationFilter
SecurityContextPersistenceFilter
HeaderWriterFilter
CsrfFilter
LogoutFilter
OAuth2AuthorizationRequestRedirectFilter
OAuth2AuthorizationRequestRedirectFilter
OAuth2LoginAuthenticationFilter
DefaultLoginPageGeneratingFilter
DefaultLogoutPageGeneratingFilter
RequestCacheAwareFilter
SecurityContextHolderAwareRequestFilter
AnonymousAuthenticationFilter
OAuth2AuthorizationCodeGrantFilter
SessionManagementFilter
ExceptionTranslationFilter
FilterSecurityInterceptor
边栏推荐
- go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...
- 9、Neural Sparse Voxel Fields
- C Primer Plus(6) 中文版 第1章 初识C语言 1.6 语言标准
- 机器学习(一)数据的预处理
- 经典论文-MobileNet V1论文及实践
- 【415. 字符串相加】
- Four startup modes of Activity
- klayout--导出版图为gds文件
- 装饰器模式:Swift 实现
- 一根网线两台电脑传输文件
猜你喜欢
Hibernate 的 Session 缓存相关操作
Write a resume like this, easy to get the interviewer
企业服务器主机加固现状分析
One-hot in TF
Active users of mobile banking grew rapidly in June, hitting a half-year high
[C语言] sscanf如何实现sscanf_s?
Square, multi-power, square root calculation in Tf
Features of LoRa Chips
轻量级网络(一):MobileNet V1,V2, V3系列
少年成就黑客,需要这些技能
随机推荐
流式结构化数据计算语言的进化与新选择
2022 China Soft Drink Market Insights
剑指offer专项突击版第26天
租房小程序
go 操作MySQL之mysql包
查找最新人员工资和上上次人员工资的变动情况
Interview questions about Android Service
2022-08-10:为了给刷题的同学一些奖励,力扣团队引入了一个弹簧游戏机, 游戏机由 N 个特殊弹簧排成一排,编号为 0 到 N-1, 初始有一个小球在编号 0 的弹簧处。若小球在编号为 i 的弹
C语言-结构体
经典论文-MobileNet V1论文及实践
2022-08-10 mysql/stonedb-slow SQL-Q16-time-consuming tracking
Conditional statements in TF; where()
兼容并蓄广纳百川,Go lang1.18入门精炼教程,由白丁入鸿儒,go lang复合容器类型的声明和使用EP04
Pico neo3 Unity Packaging Settings
For the first time, I suspect that there is a bug in selenium4 because the iframe element is not found?
Openlayers Aggregate Graph, Weight Aggregate Graph, and Aggregate Graph Click Events
leetcode:69. x 的平方根
Two state forms of Service
Do you know the basic process and use case design method of interface testing?
为什么会没有内存了呢