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;
}
现在可以了:)。非常感谢您的帮助!!
我在 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;
}
现在可以了:)。非常感谢您的帮助!!