Spring Boot OAuth成功登录监听器未触发
使用Spring Boot" title="Spring Boot">Spring Boot-在通过GitHub OAuth成功进行身份验证之后,不会触发Audit侦听器。
public class AuthenticationListener implements ApplicationListener<InteractiveAuthenticationSuccessEvent> {@Override
public void onApplicationEvent(final InteractiveAuthenticationSuccessEvent event) {
System.out.println("+++++++ ================ ------------");
}
}
我需要在其他地方注册吗?我已经尝试按照建议的其他方法在Stackoverflow上的哪个位置创建@Bean,但这没有什么区别。
完整代码https://github.com/DashboardHub/PipelineDashboard/tree/feature/178-login-
github
SecurityConfig类
@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
OAuth2ClientContext oauth2ClientContext;
@Override
protected void configure(HttpSecurity http) throws Exception {
http.antMatcher("/**")
.authorizeRequests()
.antMatchers("/", "/login**", "/webjars/**").permitAll()
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")//.failureUrl("/login?error")
.permitAll()
.and().logout().logoutSuccessUrl("/").permitAll()
.and().addFilterBefore(ssoFilter(), BasicAuthenticationFilter.class)
;
}
@Bean
@ConfigurationProperties("security.oauth2")
ClientResourcesConfig github() {
return new ClientResourcesConfig();
}
private Filter ssoFilter() {
CompositeFilter filter = new CompositeFilter();
List<Filter> filters = new ArrayList<>();
filters.add(ssoFilter(this.github(), "/login/github"));
filter.setFilters(filters);
return filter;
}
private Filter ssoFilter(ClientResourcesConfig client, String path) {
OAuth2ClientAuthenticationProcessingFilter githubFilter = new OAuth2ClientAuthenticationProcessingFilter(
path);
OAuth2RestTemplate githubTemplate = new OAuth2RestTemplate(client.getClient(),
oauth2ClientContext);
githubFilter.setRestTemplate(githubTemplate);
githubFilter.setTokenServices(new UserInfoTokenServices(
client.getResource().getUserInfoUri(), client.getClient().getClientId()));
return githubFilter;
}
}
回答:
通过将默认的ApplicationEventPublisher注入到您的安全配置Bean中,我可以正常工作。然后将其设置为处理过滤器上的应用程序事件发布者:
@Autowiredprivate ApplicationEventPublisher applicationEventPublisher;
...
githubFilter.setApplicationEventPublisher(applicationEventPublisher);
由于某些原因,默认情况下,筛选器上的应用程序事件发布者是NullEventPublisher。
以上是 Spring Boot OAuth成功登录监听器未触发 的全部内容, 来源链接: utcz.com/qa/421438.html