Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/354.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的spring@bean从未实例化?_Java_Spring_Spring Mvc - Fatal编程技术网

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提供商