2016-07-05 12 views
1

Ich habe versucht, dieses Tutorial https://spring.io/guides/tutorials/spring-boot-oauth2/#_social_login_logout meine Anwendung config (Feder boot) Dies istWie Facebook authentifizierten Benutzer in DB speichern?

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

} 

Und es funktioniert umzusetzen. Ich kann mich anmelden und kann Benutzerinformationen wie im Tutorial beschrieben erhalten. Aber ich weiß nicht, wie ich den Moment gerade nach der Anmeldung finden kann und bevor ich auf die Hauptseite umschreibe, um Benutzerdetails in der Datenbank zu speichern, wenn der Benutzer nicht existiert und seine Rollen verifiziert, falls vorhanden.

Wie kann ich das tun?

Antwort

2

Sie können diese Klasse zum Speichern von Benutzerdetails in der Datenbank nach der Anmeldung erstellen. successfulAuthentication wird nach der Anmeldung ausgeführt.

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

Nachdem Sie durch OAuth2ClientAuthenticationProcessingAndSavingFilter Modifikator OAuth2ClientAuthenticationProcessingFilter muss

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