Java 为什么我的spring@bean从未实例化?
我有一颗豆子:Java 为什么我的spring@bean从未实例化?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一颗豆子: @Bean public FilterRegistrationBean oauth2ClientFilterRegistration( OAuth2ClientContextFilter filter) { FilterRegistrationBean registration = new FilterRegistrationBean(); registration.setFilter(filter); registration.setOr
@Bean
public FilterRegistrationBean oauth2ClientFilterRegistration(
OAuth2ClientContextFilter filter) {
FilterRegistrationBean registration = new FilterRegistrationBean();
registration.setFilter(filter);
registration.setOrder(-100);
return registration;
}
但由于某种原因,它从未被调用。我遵循这些说明()并在配置类中包含以下代码
@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:
My 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提供商