出于某种原因,使用oauth2和自定义SimpleUrlAuthenticationFailureHandler的spring会在登录失败时重定向两次。
它按预期调用http://localhost:8081/login?error,但位置标题为http://localhost:8081/login,因此我看到了额外的重定向。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
http.requestMatchers()
.antMatchers("/login", "/oauth/authorize")
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.loginPage("/" + URLConstants.LOGIN)
.loginProcessingUrl("/" + URLConstants.LOGIN)
//.failureUrl("/login?error")
.failureHandler(authFailureHandler)
.permitAll();
SimpleUrlAuthenticationFailureHandler
@Component
public class AuthFailureHandler extends
SimpleUrlAuthenticationFailureHandler {
@Override
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException exception) throws IOException, ServletException {
// some code
saveException(request, exception);
getRedirectStrategy().sendRedirect(request, response, "/login?error");
上面的代码onAuthenticationFailure几乎调用与onAuthenticationFailure中的原始代码相同的方法。我也试过了 super.onAuthenticationFailure(请求,响应,异常); 但我得到相同的结果(额外的重定向)
如果我删除.failureHandler(authFailureHandler),则代码按预期工作。有什么想法吗?
查看附件图片 额外重定向 - 使用SimpleUrlAuthenticationFailureHandler 正如所料 - 没有SimpleUrlAuthenticationFailureHandler