1

このチュートリアルを実装しようとしましたhttps://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_logout これは私のアプリケーション構成(Spring Boot)です

@Configuration
@ComponentScan(basePackages = {"org.fiodorov.controller","org.fiodorov.service", "org.fiodorov.config"})
@EntityScan(basePackages = "org.fiodorov.model")
@EnableJpaRepositories(basePackages = "org.fiodorov.repository")
@EnableOAuth2Client
@EnableAutoConfiguration
public class Application extends WebSecurityConfigurerAdapter{

    @Autowired
    OAuth2ClientContext oauth2ClientContext;

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


    public static void main(String[] args) {
        SpringApplication.run(
                Application.class, args);
    }

    private Filter ssoFilter() {
        OAuth2ClientAuthenticationProcessingFilter facebookFilter = new OAuth2ClientAuthenticationProcessingFilter("/login/facebook");
        OAuth2RestTemplate facebookTemplate = new OAuth2RestTemplate(facebook(), oauth2ClientContext);
        facebookFilter.setRestTemplate(facebookTemplate);
        facebookFilter.setTokenServices(new UserInfoTokenServices(facebookResource().getUserInfoUri(), facebook().getClientId()));
        return facebookFilter;
    }

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

    @Bean
    @ConfigurationProperties("facebook.resource")
    ResourceServerProperties facebookResource() {
        return new ResourceServerProperties();
    }

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

}

そして、それは機能します。チュートリアルで説明されているように、ログインしてユーザー情報を取得できます。しかし、ログイン直後、ユーザーが存在しない場合はユーザーの詳細をデータベースに保存するためのメインページにリダイレクトする前に、その瞬間をどのように見つけ、存在する場合は彼の役割を確認することができるかわかりません。

これどうやってするの?

4

1 に答える 1

2

ログイン後にユーザーの詳細をデータベースに保存するために、このクラスを作成できます。ログイン後、successfulAuthenticationが実行されます。

class OAuth2ClientAuthenticationProcessingAndSavingFilter extends OAuth2ClientAuthenticationProcessingFilter {

    public OAuth2ClientAuthenticationProcessingAndSavingFilter(String defaultFilterProcessesUrl) {
        super(defaultFilterProcessesUrl);
    }

    @Override
    protected void successfulAuthentication(HttpServletRequest request, HttpServletResponse response,
            FilterChain chain, Authentication authResult) throws IOException, ServletException {
        super.successfulAuthentication(request, response, chain, authResult);

        SecurityContext context =  SecurityContextHolder.getContext();
    }
}

OAuth2ClientAuthenticationProcessingFilter を OAuth2ClientAuthenticationProcessingAndSavingFilter で変更する必要がある後

private Filter ssoFilter() {
        OAuth2ClientAuthenticationProcessingAndSavingFilter facebookFilter = new OAuth2ClientAuthenticationProcessingAndSavingFilter("/login/facebook");
        OAuth2RestTemplate facebookTemplate = new OAuth2RestTemplate(facebook(), oauth2ClientContext);
        facebookFilter.setRestTemplate(facebookTemplate);
        facebookFilter.setTokenServices(new UserInfoTokenServices(facebookResource().getUserInfoUri(), facebook().getClientId()));
        return facebookFilter;
    }
于 2016-10-07T21:24:04.363 に答える