繁体   English   中英

oauth2 spring-security 成功和失败处理程序

[英]oauth2 spring-security success and failure handler

我正在使用带有 OAuth2 的 Spring Security。 除了登录成功和失败处理程序外,它工作正常。

就像 spring 网络安全 OAuth2 没有明确定义的成功和失败处理程序挂钩来更新数据库并相应地设置响应。

我需要扩展什么过滤器,它在 Spring Security 过滤器链中的位置应该是什么?

oauth2login方法指定successHandlerfailureHandler

@Configuration
@EnableWebSecurity
class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Value("${successUrl}")
    private String successUrl;
    @Value("${failureUrl}")
    private String failureUrl;

    @Override
    protected void configure(HttpSecurity http) throws Exception {

        http
            .oauth2Login()
                .successHandler(successHandler())
                .failureHandler(failureHandler());
    }

    @Bean
    SimpleUrlAuthenticationSuccessHandler successHandler() {
        return new SimpleUrlAuthenticationSuccessHandler(successUrl);
    }
    
    @Bean
    SimpleUrlAuthenticationFailureHandler failureHandler() {
        return new SimpleUrlAuthenticationFailureHandler(failureUrl);
    }
}

已针对 Spring Security 5.0.6 进行测试

我个人使用

@Component
public class MyAuthenticationSuccessListener implements ApplicationListener<AuthenticationSuccessEvent> {

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

}

响应中的附加信息可以由CustomTokenEnhancer设置

这是一个关于如何在 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;
 }

他们没有提供您需要的线路,在这里。

成功处理程序和失败处理程序在表单登录中定义(如果您使用 Spring 的 XML)。 它与任何其他 spring-security 定义没有什么不同:

<security:form-login 
            login-page="/login/login.htm" 
            authentication-success-handler-ref="authenticationSuccessHandler"
            authentication-failure-url="/login/login.htm?login_error=1" />

你可以在这里找到处理程序。

“故障处理程序”非常相似。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM