2016-07-05 5 views
1

나는이 튜토리얼이 내 응용 프로그램의 설정 (봄 부팅)facebook 인증 사용자를 DB에 저장하는 방법은 무엇입니까?

@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; 
    } 

} 

그리고 그것은 작동합니다 https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_logout 을 구현하기 위해 노력했다. 나는 로그인 할 수 있으며 튜토리얼에서 설명한대로 사용자 정보를 얻을 수 있습니다. 하지만 로그인 한 직후와 사용자가 존재하지 않으면 데이터베이스에 사용자 정보를 저장하고 주저하지 않고 자신의 역할을 확인하기 위해 주 페이지로 리디렉션하기 전에 어떻게 그 순간을 찾을 수 있을지 모르겠습니다.

어떻게하면됩니까?

답변

2

로그인 후 사용자 세부 정보를 데이터베이스에 저장하기 위해이 클래스를 만들 수 있습니다. 성공적인 인증은 로그인 후 실행됩니다.

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(); 
    } 
} 

당신은

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; 
    } 
OAuth2ClientAuthenticationProcessingAndSavingFilter

에 의해 OAuth2ClientAuthenticationProcessingFilter있는 변경해야한다 후
관련 문제