我正在使用oath2 spring security。它的工作正常,除了登录成功和失败处理程序。就像在春季Web安全性中一样,OAth2没有明确定义的成功和失败处理程序挂钩来更新数据库并相应地设置响应。如果有人能为我提供相同的代码行,我将不胜感激。什么过滤器需要扩展及其在弹簧安全过滤器链中的位置
答案 0 :(得分:3)
This is一个很好的教程,介绍如何使用oauth2进行spring boot。他们向下展示了如何手动配置sso过滤器:
private Filter ssoFilter(OAuth2Configuration client, String path) {
OAuth2ClientAuthenticationProcessingFilter filter = new OAuth2ClientAuthenticationProcessingFilter(path);
OAuth2RestTemplate template = new OAuth2RestTemplate(client.getClient(), oauth2ClientContext);
filter.setRestTemplate(template);
filter.setTokenServices(new UserInfoTokenServices(
client.getResource().getUserInfoUri(), client.getClient().getClientId()));
//THIS IS THE PLACE YOU CAN SET THE HANDLER
filter.setAuthenticationSuccessHandler(savedRequestAwareAuthenticationSuccessHandler());
return filter;
}
他们没有提供你需要的那条线,但我确实:)
答案 1 :(得分:2)
我个人使用
@Component
public class MyAuthenticationSuccessListener implements ApplicationListener<AuthenticationSuccessEvent> {
@Override
public void onApplicationEvent(AuthenticationSuccessEvent event) {
System.out.println("Authenticated");
}
}
响应中的其他信息可以由CustomTokenEnhancer
设置答案 2 :(得分:1)
为oauth2login方法指定successHandler和failureHandler:
@Configuration
@EnableWebSecurity
class SecurityConfig extends WebSecurityConfigurerAdapter {
@Value("${successUrl}")
private String successUrl;
@Value("${failureUrl}")
private String failureUrl;
@Override
protected void configure(HttpSecurity http) throws Exception {
// @formatter:off
http
.oauth2Login()
.successHandler(successHandler())
.failureHandler(failureHandler());
// @formatter:on
}
@Bean
SimpleUrlAuthenticationSuccessHandler successHandler() {
return new SimpleUrlAuthenticationSuccessHandler(successUrl);
}
@Bean
SimpleUrlAuthenticationFailureHandler failureHandler() {
return new SimpleUrlAuthenticationFailureHandler(failureUrl);
}
经过Spring Secury 5.0.6的测试
答案 3 :(得分:-3)
成功处理程序和失败处理程序在form-login中定义(如果使用Spring的XML)。它与任何其他弹簧安全定义没有什么不同:
<security:form-login
login-page="/login/login.htm"
authentication-success-handler-ref="authenticationSuccessHandler"
authentication-failure-url="/login/login.htm?login_error=1" />
你可以找到处理程序here。
&#34;失败处理程序&#34;很相似。