当前位置:网站首页>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
边栏推荐
- 分布式锁-Redission - 缓存一致性解决
- 3.1-Classification-probabilistic generative model
- 【415. 字符串相加】
- Analysys and the Alliance of Small and Medium Banks jointly released the Hainan Digital Economy Index, so stay tuned!
- Nuget找不到包的问题处理
- IDEA的初步使用
- Kotlin算法入门计算质因数
- Pico neo3 Unity Packaging Settings
- Test cases are hard?Just have a hand
- 查找最新人员工资和上上次人员工资的变动情况
猜你喜欢
excel 透视表 值显示内容 不显示计数
Square, multi-power, square root calculation in Tf
通过记账,了解当月收支情况
1.1-Regression
golang 字符串操作
机器学习(二)线性回归
查询跟踪快递单号物流,智能分析物流中转有延误的单号
My creative anniversary丨Thank you for being with you for these 365 days, not forgetting the original intention, and each is wonderful
1036 Programming with Obama (15 points)
1076 Wifi Password (15 points)
随机推荐
Kaldi语音识别工具编译问题记录(踩坑记录)
Use tf.argmax in Tensorflow to return the index of the maximum value of the tensor along the specified dimension
囍楽cloud task source code
用 Antlr 重构脚本解释器
oracle数据库中列转行,列会有变化
剑指offer专项突击版第26天
leetcode: 69. Square root of x
Notable NFT development trends in 2022
Machine Learning Summary (2)
LoRa芯片的特征
快速幂,逆元的求解
几何EX3 功夫牛宣布停售,入门级纯电产品为何总成弃子
一根网线两台电脑传输文件
Two state forms of Service
2022年值得关注的NFT发展趋势
JUC并发编程
go-grpc TSL authentication solution transport: authentication handshake failed: x509 certificate relies on ... ...
机器学习(三)多项式回归
Four operations in TF
数据库无法启动,报无法分配内存,怎么处理