2014-10-16 2 views
1

Как настроить настраиваемый AuthenticationFailureHandler в Spring Security с использованием конфигурации на основе Java? У меня уже есть класс SecurityConfig, который расширяет WebSecurityConfigurerAdapter и настраивает базовую аутентификацию HTTP с помощью httpBasic(), но я не могу понять, как установить AuthenticationFailureHandler.Настройка пользовательского AuthenticationFailureHandler с использованием конфигурации Java

Моя настоящая цель - перенаправить на внешний URL-адрес (страницу входа) вместо того, чтобы возвращать ответ 401 только для некоторых запросов (GET-запросы к определенным URL-адресам), поэтому, если есть другой или лучший способ сделать это, я бы хотел знать!

ответ

1

Вы должны передать его в методе failureHandler .. цепь может выглядеть следующим образом:

http.formLogin().failureHandler() 

Кажется, что класс при условии, весной может помочь вам с простой редирект:

http://docs.spring.io/autorepo/docs/spring-security/4.0.0.M2/apidocs/org/springframework/security/web/authentication/SimpleUrlAuthenticationFailureHandler.html

Надежда помогает.

+1

Спасибо freakman, и ваш ответ правильный для formLogin(), поэтому я даю вам голосование. К сожалению, я не упомянул, что фактически использую HTTP Basic Authentication с помощью httpBasic(). Очень жаль, что не упоминал об этом раньше. Я уточню свой вопрос. – bsa

+1

не пробовал, что раньше .. но посмотрите http.httpBasic(). AuthenticationEntryPoint (authEntryPoint). Пример AuthEntryPoint - это класс BasicAuthenticationEntryPoint - метод начала возвращает неаризованный ответ HTTP. Вы можете попытаться предоставить свой класс и использовать метод sendRedirect из HttpServletResponse. – freakman

+0

Я дам вам попытку и дам вам знать, спасибо. – bsa

1

Я использовал предложение freakman о создании пользовательского класса BasicAuthenticationEntryPoint. Вот мой код, если кто-то еще должен сделать что-то подобное:

// See https://github.com/spring-projects/spring-security/blob/3.2.x/web/src/main/java/org/springframework/security/web/authentication/www/BasicAuthenticationEntryPoint.java 
public class CustomBasicAuthenticationEntryPoint extends BasicAuthenticationEntryPoint { 
    private static Logger logger = loggerFactory.getLogger(CustomBasicAuthenticationEntryPoint.class); 

    @Value("${crm.integration.sso.login.form.url}") 
    private String loginFormUrl; 

    /** 
    * This method is called when authentication fails. 
    */ 
    @Override 
    public void commence(HttpServletRequest request, 
      HttpServletResponse response, AuthenticationException authException) 
      throws IOException, ServletException { 
     String path = request.getRequestURI().substring(request.getContextPath().length()); 
     logger.info(String.format("CustomBasicAuthenticationEntryPoint.commence() - %s", path)); 
     if ("GET".equals(request.getMethod().toUpperCase()) 
       && path.startsWith("/manage") 
     ) { 
      response.sendRedirect(loginFormUrl); 
     } else { 
      super.commence(request, response, authException); 
     } 
    } 

} 
Смежные вопросы