簡體   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