gpt4 book ai didi

java - 为什么我的 spring @bean 从未实例化?

转载 作者:行者123 更新时间:2023-11-30 10:48:16 25 4
gpt4 key购买 nike

我有一个 bean :

@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(
OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}

但由于某种原因,它从未被调用过。我正在按照这些说明 (https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_manual) 进行操作,并在我的配置类中包含以下代码。

@Configuration
@EnableOAuth2Client
public class OAuthConfig extends WebSecurityConfigurerAdapter {

@Autowired
OAuth2ClientContext oauth2ClientContext;

@Bean
@ConfigurationProperties("security.oauth2.client")
OAuth2ProtectedResourceDetails oauth2() {
return new AuthorizationCodeResourceDetails();
}

@Bean
@ConfigurationProperties("security.oauth2.resource")
ResourceServerProperties oauth2Resource() {
return new ResourceServerProperties();
}

@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(
OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}

@Override
protected void configure(HttpSecurity http) throws Exception {
http
.antMatcher("/**")
.authorizeRequests()//starts chain for restricting access
.antMatchers("/", "/login**", "/webjars/**")//maps requests at these paths
.permitAll()//urls are allowed by anyone
.anyRequest()//maps any request
.authenticated()//urls are allowed by any authenticated user
.and().addFilterBefore(ssoFilter(oauth2(), oauth2Resource()), BasicAuthenticationFilter.class);
}

private Filter ssoFilter(OAuth2ProtectedResourceDetails resource, ResourceServerProperties properties) {
OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter("/login/oauth2");
OAuth2RestTemplate template = new OAuth2RestTemplate(resource, oauth2ClientContext);
filter.setRestTemplate(template);
filter.setTokenServices(new UserInfoTokenServices(properties.getUserInfoUri(), resource.getClientId()));
return filter;
}
}

它上面的其他两个 bean(oauth2 和 oauth2Resource)在应用程序启动时被调用,但是 oauth2ClientFilterRegistration bean 永远不会被调用(根据教程,它应该)。

谁能帮我理解为什么(我对 Spring 和 Spring Boot 还很陌生)?

更新 1:

我的 application.yml 如下所示:

security:
oauth2:
client:
clientId: 233668646673605
clientSecret: 33b17e044ee6a4fa383f46ec6e28ea1d
accessTokenUri: https://graph.facebook.com/oauth/access_token
userAuthorizationUri: https://www.facebook.com/dialog/oauth
tokenName: oauth_token
authenticationScheme: query
clientAuthenticationScheme: form
resource:
userInfoUri: https://graph.facebook.com/me

logging:
level:
org.springframework.security: DEBUG

spring:
resources:
chain:
enabled: true

如果我将第二行更改为:

facebook:

代替:

oauth2:

然后突然在启动时调用“oauth2ClientFilterRegistration”。

为什么会有所不同?巫术?

最佳答案

文档指出:“我们已经有了一个安全的应用程序,因此实际上只需添加 @EnableAuthorizationServer 注释即可”。

所以添加:

@SpringBootApplication
@RestController
@EnableOAuth2Client
@EnableAuthorizationServer
public class SocialApplication extends WebSecurityConfigurerAdapter {
...
}

一旦您添加了该配置以使您的应用程序成为 OAuth2 服务器,那么您可以配置您接受的客户端:“有了新的注释,Spring Boot 将安装所有必要的端点并为它们设置安全性,如果我们提供我们想要支持的 OAuth2 客户端的一些详细信息”

因此指定“facebook”意味着 facebook 是 OAuth2 提供者,而使用“oauth2”意味着您的应用成为 OAuth2 提供者。

关于java - 为什么我的 spring @bean 从未实例化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35867437/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com