2014-10-24 9 views
3

У меня есть реализация Spring Security, которая не имеет состояния и использует аутентификацию на основе токенов. Большая часть моей логики находится внутри класса, который расширяет AbstractAuthenticationProcessingFilter. Моя проблема заключается в том, что после успешной проверки подлинности AbstractAuthenticationProcessingFilter выполняет перенаправление 302, чего я не хочу. Я просто хочу, чтобы первоначальный запрос был завершен. Как мне обойти это?Весенняя безопасность без перенаправления

ответ

3

Я смог сделать метод «входа в систему», защищенный пружиной, чтобы вернуть «200 OK», а не «перенаправить 302», переопределив обработчик успеха и отказа. В приведенном ниже коде показано, как добиться того же.

 //configure http by using the successHandler 
     //and failure handler methods 
     http. 
      formLogin() 
       .loginPage("/authentication/login") 
       .loginProcessingUrl("/authentication/processLogin") 
       .successHandler(successHandler()) 
       .failureHandler(failureHandler()) 
      .and() 
      ...... 



    private AuthenticationFailureHandler failureHandler() { 
     return new SimpleUrlAuthenticationFailureHandler() { 
      public void onAuthenticationFailure(HttpServletRequest request, 
        HttpServletResponse response, AuthenticationException exception) 
        throws IOException, ServletException { 
       response.setContentType("text/html;charset=UTF-8"); 
       response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Authentication Failed. Wrong username or password or both"); 
      } 
     }; 
    } 


    private AuthenticationSuccessHandler successHandler() { 
     return new SimpleUrlAuthenticationSuccessHandler() { 
      public void onAuthenticationSuccess(HttpServletRequest request, 
        HttpServletResponse response, Authentication authentication) 
        throws IOException, ServletException { 
       response.setContentType("text/html;charset=UTF-8"); 
       HttpSession session = request.getSession(false); 
       session.setMaxInactiveInterval(60*180); 
       response.getWriter().println("LoginSuccessful"); 
      } 
     }; 
    } 
Смежные вопросы