spring安全成功处理程序忽略始终使用false

vnzz0bqm  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(402)

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

  1. public SimpleAuthenticationFilter authenticationFilter() throws Exception {
  2. SimpleAuthenticationFilter filter = new SimpleAuthenticationFilter();
  3. filter.setAuthenticationManager(authenticationManagerBean());
  4. filter.setAuthenticationFailureHandler(failureHandler());
  5. filter.setAuthenticationSuccessHandler(successHandler());
  6. return filter;
  7. }

这就是成功处理程序。我原以为这会像它一样工作。defaultsuccessurl(“/home”,false),但它不是。。。

  1. public SimpleUrlAuthenticationSuccessHandler successHandler() {
  2. SimpleUrlAuthenticationSuccessHandler successHandler = new SimpleUrlAuthenticationSuccessHandler();
  3. successHandler.setDefaultTargetUrl("/home");
  4. successHandler.setAlwaysUseDefaultTargetUrl(false);
  5. return successHandler;
  6. }

这是安全配置:

  1. @Override
  2. protected void configure(HttpSecurity http) throws Exception {
  3. http
  4. .addFilterBefore(authenticationFilter(), UsernamePasswordAuthenticationFilter.class)
  5. .authorizeRequests()
  6. .antMatchers(resources).permitAll()
  7. .antMatchers("/somePage").hasRole("ADMIN")
  8. .anyRequest().authenticated()
  9. .and()
  10. .formLogin()
  11. .loginPage("/login")
  12. .and()
  13. .logout()
  14. .logoutSuccessUrl("/login")
  15. .and()
  16. .csrf().disable();
  17. }

你知道我遗漏了什么吗?目标是跳过默认的目标url。
非常感谢。

9w11ddsr

9w11ddsr1#

我的意图是在认证后直接访问url页面。。。因为它起作用了 .defaultSuccessUrl("/home", false) ; 但是马库斯给了我解决问题的主意!我所要做的就是这样更改successhandler的类:

  1. public SimpleUrlAuthenticationSuccessHandler successHandler() {
  2. SavedRequestAwareAuthenticationSuccessHandler successHandler = new SavedRequestAwareAuthenticationSuccessHandler();
  3. successHandler.setAlwaysUseDefaultTargetUrl(false);
  4. successHandler.setDefaultTargetUrl("/home");
  5. return successHandler;
  6. }

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

相关问题