@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;
}
}
を私は[ '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を呼び出すことによってこのメソッドを呼び出すべきではありません。" –
T帽子はまさに問題でした。 @RCありがとう。問題を解決し識別するためのものです。これは非常に時間を節約しました。奨励金を授与することができ、今後のユーザーにも恩恵を受ける可能性があるように、これを回答として追加してください。ありがとう、トン。 :) – varunkr