2015-10-29 2 views
0

Я использую базовое разрешение с помощью Spring Security. Я настраиваю последнюю через конфигурацию Java.Отправьте код ошибки http 401 вместо страницы входа по умолчанию, весенняя безопасность

Я бы хотел отправить клиенту код ошибки HTTP 401 с сообщением «Недействительный логин и пароль», если они недействительны. Однако в настоящее время Spring Security просто показывает мне всплывающее окно по умолчанию.

Вот моя конфигурация Spring безопасности:

@Override 
protected void configure(HttpSecurity http) throws Exception { 

    http.csrf().disable(); 

    http.authorizeRequests().anyRequest().authenticated().and() 
      .httpBasic() 
      .and() 
      .logout() 
      .logoutUrl("/logout") 
      .logoutSuccessUrl("/pages/index.html"); 

    http.exceptionHandling().authenticationEntryPoint(new AjaxAuthorizationPoint()); 
} 

Насколько я понял, я должен добавить обычай authentificationEntryPoint обрабатывать случай недействительных полномочий, то есть я должен послать туда код 401 ошибок с сообщение об ошибке

Вот код для этого. Для простоты тело метода довольно просто.

public class AjaxAuthorizationPoint extends BasicAuthenticationEntryPoint{ 

    @Override 
    public void commence(final HttpServletRequest request, 
         final HttpServletResponse response, 
         final AuthenticationException authException) throws IOException { 
     System.out.println("blah"); 

     response.sendError(HttpServletResponse.SC_UNAUTHORIZED, "Unauthorized"); 
    } 
} 

Однако метод public void commence() не вспылить, когда я ввожу неверный логин и пароль и Spring просто посылает мне всплывающее окно входа в систему по умолчанию.

Как я могу переопределить стратегию по умолчанию? Как настроить безопасность Spring для отправки кода ошибки HTTP 401 вместо отображения страницы входа по умолчанию?

ответ

0

Я думаю, что я нашел решение для своей проблемы. Вот код, который делает именно то, что мне нужно. Конфигурация безопасности

Spring:

@Override 
protected void configure(HttpSecurity http) throws Exception { 

    http.httpBasic().authenticationEntryPoint(new AjaxAuthorizationPoint("/ajax_login")); 

    http.authorizeRequests().anyRequest().authenticated().and().httpBasic() 
      .and() 
      .logout() 
      .logoutUrl("/logout") 
      .logoutSuccessUrl("/pages/index.html"); 
} 

и пользовательские разрешения Аякса пункт:

public class AjaxAuthorizationPoint extends LoginUrlAuthenticationEntryPoint { 

    public AjaxAuthorizationPoint(String loginFormUrl) { 
     super(loginFormUrl); 
    } 

    @Override 
    public void commence(HttpServletRequest request, 
         HttpServletResponse response, 
         AuthenticationException authException) throws IOException { 

     response.setStatus(403); 
     response.getWriter().print("Invalid login/password"); 
     response.getWriter().flush(); 
    } 
} 

бы признателен любой обзор кода.

+1

response.setStatus (HttpServletResponse.SC_UNAUTHORIZED); –

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