2016-12-30 9 views
4

@EnableOAuth2Clientを使用してOAuth2クライアントを手動で構成する公式のスプリングドキュメントからthisチュートリアルに従っています。何らかの理由でそれが機能していません。アプリを実行してhttp://localhost:8080/loginにアクセスすると、Googleログインオプションの代わりに基本的なフォームのログインが表示されます。 (私のユースケースのためにこの手動構成作業を行う必要があります。)OAuth2AuthenticationProcessingFiltersを使用して手動構成を行わない場合は@EnableOauth2Ssoコードが正常に動作します。この場合、私はログインページにアクセスする際にオプションでGoogleのサインを取得します。誰かが私を助けてくれますか?私は以下のコード追加しました:@ EnableOAuth2Clientを使用しているOAuth2クライアントの手動構成は動作しません。

これは@EnableOAuth2Ssoであり、これは@EnableOAuth2Clientである

@Configuration 
@EnableWebSecurity 
@EnableOAuth2Sso 
@PropertySource({ "classpath:/oauth2.properties" }) 
@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    OAuth2ClientContext oauth2ClientContext; 

    @Value("${security.oauth2.resource.userInfoUri}") 
    String userInfoUri; 

    @Value("${security.oauth2.client.clientId}") 
    String clientId; 

    @Bean 
    public RequestContextListener requestContextListener() { 
     return new RequestContextListener(); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     super.configure(http); 
//  http.antMatcher("/**").addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); 
    } 
} 

完璧に動作し、動作しませんし、私が代わりに

@Configuration 
@EnableWebSecurity 
@EnableOAuth2Client 
@PropertySource({ "classpath:/oauth2.properties" }) 
@EnableGlobalMethodSecurity(prePostEnabled = true, jsr250Enabled = true) 
public class SecurityConfig extends WebSecurityConfigurerAdapter { 

    @Autowired 
    OAuth2ClientContext oauth2ClientContext; 

    @Value("${security.oauth2.resource.userInfoUri}") 
    String userInfoUri; 

    @Value("${security.oauth2.client.clientId}") 
    String clientId; 

    @Bean 
    public RequestContextListener requestContextListener() { 
     return new RequestContextListener(); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     super.configure(http); 
     http.antMatcher("/**").addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); 
    } 

    private Filter ssoFilter() { 
     OAuth2ClientAuthenticationProcessingFilter googleFilter = new OAuth2ClientAuthenticationProcessingFilter("/login"); 
     OAuth2RestTemplate googleTemplate = new OAuth2RestTemplate(google(), oauth2ClientContext); 
     googleFilter.setRestTemplate(googleTemplate); 
     googleFilter.setTokenServices(new UserInfoTokenServices(googleResource().getUserInfoUri(), google().getClientId())); 
     return googleFilter; 
    } 

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

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

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

} 
+1

を私は[ 'super.configure(HTTPへの呼び出しを言うでしょう。 ) '](https://github.com/spring-projects/spring-security/blob/master/config/src/main/java/org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter.java# javadocから: "通常、サブクラスは、それらの設定を上書きする可能性があるため、superを呼び出すことによってこのメソッドを呼び出すべきではありません。" –

+0

T帽子はまさに問題でした。 @RCありがとう。問題を解決し識別するためのものです。これは非常に時間を節約しました。奨励金を授与することができ、今後のユーザーにも恩恵を受ける可能性があるように、これを回答として追加してください。ありがとう、トン。 :) – varunkr

答えて

2

Iフォーム・ログインを取得しますsuper.configure(http)への電話が問題になると言えます。 javadocツールから

通常、サブクラスは、それが彼らの設定を無効にすることができるよう、スーパーを呼び出すことによって、このメソッドを呼び出すべきではない「

+0

答えの友達に感謝します。私は賞金を後で授与します、それは私が20時間以内にそれを授与することができると言います、私は質問が数時間前に投稿されたと思います。乾杯! – varunkr