2016-05-08 13 views
0

ユーザーがFacebookを使用してログインする書き込みアプリです。AuthenticationSuccessEvent never fired

マイセキュリティ設定/アプリケーションクラス:それは解雇されることはありません

package app; 
    @Component 
    public class AuthenticationListener implements ApplicationListener<AuthenticationSuccessEvent> { 

     @Override 
     public void onApplicationEvent(AuthenticationSuccessEvent event) { 
      System.out.println("Event fired"); 
     } 
    } 

@SpringBootApplication 
@EnableOAuth2Sso 
@ComponentScan(basePackages = { "app" }) 
public class Application extends WebSecurityConfigurerAdapter { 

    @SuppressWarnings("SpringJavaAutowiringInspection") 
    @Autowired 
    private OAuth2ClientContext oauth2ClientContext; 

    @Override 
    protected void configure(HttpSecurity http) throws Exception { 
     http 
       .antMatcher("/**") 
       .authorizeRequests() 
       .antMatchers("/", 
         "/login**", 
         "/webjars/**", 
         "/bower_components/**", 
         "/assets/**", 
         "/app/**", 
         "/api/auth/isAuthenticated") 
       .permitAll() 
       .anyRequest() 
       .authenticated() 
       .and().formLogin().defaultSuccessUrl("/", true).loginPage("/login").permitAll() 
       .and().logout().logoutSuccessUrl("/").permitAll() 
       .and().addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class); 
    } 

    @Bean 
    @ConfigurationProperties("facebook") 
    ClientResources facebook() { 
     return new ClientResources(); 
    } 

    private Filter ssoFilter() { 
     CompositeFilter filter = new CompositeFilter(); 
     List<Filter> filters = new ArrayList<>(); 
     filters.add(ssoFilter(facebook(), "/login/facebook")); 
     filter.setFilters(filters); 
     return filter; 
    } 

    private Filter ssoFilter(ClientResources client, String path) { 
     OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(path); 
     OAuth2RestTemplate facebookTemplate = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext); 
     filter.setRestTemplate(facebookTemplate); 
     filter.setTokenServices(new UserInfoTokenServices(client.getResource().getUserInfoUri(), client.getClient().getClientId())); 
     return filter; 
    } 

    class ClientResources { 
     private OAuth2ProtectedResourceDetails client = new AuthorizationCodeResourceDetails(); 
     private ResourceServerProperties resource = new ResourceServerProperties(); 

     public OAuth2ProtectedResourceDetails getClient() { 
      return client; 
     } 

     public ResourceServerProperties getResource() { 
      return resource; 
     } 
    } 

私の問題は、私は、リスナーを設定しさえということです。私はここに提供された解決策を試しました:Spring boot OAuth successful login listener not triggeringしかしそれは助けません。 SecurityContextHolder.getContext().getAuthentication().isAuthenticated()はログイン後trueを返します。

答えて

2

OAuth SSOサポートは実際にAuthenticationSuccessEventを起動しません。これは私が最近直面してきたものです。このis implemented nowがまだリリースされていません。

+0

回避策はありますか?私は、成功したログイン後に何らかのアクションを実行するにはどうすればいいですか? –

+0

だと思います。状況を悪化させるために、私は[Spring Bootの問題](https://github.com/spring-projects/spring-boot/issues/5853)も修正しました。私の推測では、 'OAuth2ClientAuthenticationProcessingFilter'を自分で登録しようとするべきです。実装の変更を確認してください。おそらく自分の内線番号でバックポートすることができます。 –