2016-11-19 5 views
0

Приложение My Spring Boot обслуживает POST-запросы в конечной точке входа http://server.org/users/login, что может привести к ошибке 401. В этом случае Spring выполняет другой запрос POST на зарегистрированную страницу ошибки, тогда как я ожидал, что запрос GET будет выполняться всегда. Можно ли изменить это поведение?Почему Spring выполняет POST-запрос на зарегистрированную страницу с ошибкой?

EDIT:

Я использую следующий код, чтобы настроить свою страницу ошибки:

@Bean 
public EmbeddedServletContainerCustomizer containerCustomizer() { 

    return (container -> { 
     ErrorPage error401Page = new ErrorPage(HttpStatus.UNAUTHORIZED, "/weblogin"); 
     ErrorPage error404Page = new ErrorPage(HttpStatus.NOT_FOUND, "/404.html"); 
     ErrorPage error500Page = new ErrorPage(HttpStatus.INTERNAL_SERVER_ERROR, "/500.html"); 

     container.addErrorPages(error401Page, error404Page, error500Page); 
    }); 
} 

Когда я называю http://server.org/users/login использованием, например, форма, процедура следующая:

1) запрос POST выдается на сервер в http://server.org/users/login

2) Вход в учетные данные недействительны, ошибка страница 401 должна быть возвращена

3) Здесь я не уверен, что будет дальше, Spring сообщает мне в журналах, что другой запрос POST выполняется до /weblogin. Если бы я не указать страницу ошибки, запрос POST выполняется в /error:

2016-11-19 20:10:38,827 [http-nio-80-exec-3] DEBUG o.s.web.servlet.DispatcherServlet - DispatcherServlet with name 'dispatcherServlet' processing POST request for [/weblogin] 
2016-11-19 20:10:38,828 [http-nio-80-exec-3] DEBUG o.s.w.s.m.m.a.RequestMappingHandlerMapping - Looking up handler method for path /weblogin 
+1

Что вы имеете в виду с «Spring выполняет другой запрос POST "? Заказчик выдает запрос. – Henry

+0

** Можете ли вы показать настройки приложения? ** И я думаю, что весна не будет вызывать какой-либо метод post для ошибки, она вернет страницу с ошибкой, если это произойдет. –

ответ

1

Я считаю, что вы используете FromLogin на конфигурации системы безопасности.

Было бы проще, если бы вы просто:

formLogin() 
     .failureUrl("/my_failure_url") 
     .failureHandler(authenticationFailureHandler); 

использовать URL отказа, чтобы перейти на страницу URL на ошибки, и/или написать свой обработчик на аутентификации, которые срабатывают на от сбоя входа в систему.

Этот боб должен реализует AuthenticationFailureHandler интерфейс и должен быть помечен как боб с использованием @Bean или @Component, на этом боба все, что вам нужно сделать, это реализовать свою логику:

@Override 
public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException authEx) 
        throws IOException, ServletException { 
       // TODO Auto-generated method stub  
} 

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

  • Нет связанных вопросов^_^