Spring 安全成功处理程序忽略总是使用 false

Spring security success handler ignores always use false

我在 Spring 安全配置中使用过滤器,因此除了用户名和密码外,我还可以从登录页面获得更多参数。这是身份验证过滤器:

public SimpleAuthenticationFilter authenticationFilter() throws Exception {
        
        SimpleAuthenticationFilter filter = new SimpleAuthenticationFilter();
        filter.setAuthenticationManager(authenticationManagerBean());
        filter.setAuthenticationFailureHandler(failureHandler());       
        filter.setAuthenticationSuccessHandler(successHandler());
        return filter;
    }

这是成功处理程序。我认为这会像 .defaultSuccessUrl("/home", false) 一样工作,但它不是...

public SimpleUrlAuthenticationSuccessHandler successHandler() {
    
    SimpleUrlAuthenticationSuccessHandler successHandler = new SimpleUrlAuthenticationSuccessHandler();
    successHandler.setDefaultTargetUrl("/home");
    successHandler.setAlwaysUseDefaultTargetUrl(false);
    
    return successHandler;
}

这是安全配置:

@Override
    protected void configure(HttpSecurity http) throws Exception {
        
        http
            .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
            .authorizeRequests()
                .antMatchers(resources).permitAll()                 
                .antMatchers("/somePage").hasRole("ADMIN")
                .anyRequest().authenticated()
            .and()
            .formLogin()
                .loginPage("/login")
            .and()
            .logout()
                .logoutSuccessUrl("/login")         
            .and()
                .csrf().disable();
        
    }

知道我错过了什么吗?目标是跳过默认目标 url.

万分感谢。

我的意图是在身份验证后直接访问 URL 的页面...因为它有效 .defaultSuccessUrl("/home", false);但是 Marcus 给了我解决方案的想法!我所要做的就是以这种方式更改 successHandler 的 class:

public SimpleUrlAuthenticationSuccessHandler successHandler() {
        
        SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
        successHandler.setAlwaysUseDefaultTargetUrl(false);
        successHandler.setDefaultTargetUrl("/home");
        
        return successHandler;
    }

现在可以了:)。非常感谢您的帮助!!