【问题标题】:Spring security success handler ignores always use falseSpring 安全成功处理程序忽略始终使用 false
【发布时间】:2021-06-17 21:48:30
【问题描述】:

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

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();
        
    }

关于我缺少什么的任何想法?目标是跳过默认的目标网址。

谢谢一百万。

【问题讨论】:

  • 请出示安全配置
  • 好的,我刚刚编辑了显示配置的帖子。
  • 当您使用.defaultSuccessUrl("/home", false) 时,您定义了一个SavedRequestAwareAuthenticationSuccessHandler,它使用会话中保存的请求来重定向它。因此,如果您请求/home 并以/login 结束,登录成功后您将被重定向到/home。在您的SimpleUrlAuthenticationSuccessHandler 中,您应该将alwaysUseDefaultTargetUrl 设置为true。让我知道它是否适合您。

标签: url filter spring-security


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-09-30
    • 1970-01-01
    • 2014-02-05
    • 2019-12-28
    • 2016-02-09
    • 2016-02-04
    • 1970-01-01
    • 2015-06-03
    • 1970-01-01
    相关资源
    最近更新 更多