Я недавно обновил свое приложение с Spring Boot 1.5.14 до Spring Boot 2. У меня возникла проблема при пересылке запроса после перехвата его с помощью пользовательского фильтра.
CustomFilter.java
@Override
protected void doFilterInternal(HttpServletRequest req, HttpServletResponse res, FilterChain filterChain) throws ServletException, IOException {
HeaderMapRequestWrapper requestWrapper = new HeaderMapRequestWrapper(req);
requestWrapper.addHeader(SecurityConstants.X_ADAP_HEADER,"true");
requestWrapper.getRequestDispatcher(RestApi.NEW_LOGIN_TOKEN).forward(requestWrapper, res);
}
После пересылки обновленного запроса я получаю следующую ошибку:
2018-09-17 17:40:34.448 WARN 28704 --- [-nio-443-exec-5] o.s.web.servlet.PageNotFound : Request method 'POST' not supported
2018-09-17 17:40:34.449 WARN 28704 --- [-nio-443-exec-5] .w.s.m.s.DefaultHandlerExceptionResolver : Resolved exception caused by Handler execution: org.springframework.web.HttpRequestMethodNotSupportedException: Request method 'POST' not supported
Я ничего не изменил в отношении этой части кода во время миграции, однако это работало нормально при использовании Spring Boot 1.5.14.
После дальнейшей отладки я увидел, что дальше по трассировке стека я достиг метода checkRequest(HttpServletRequest request)
в классе WebContentGenerator
.
WebContentGenerator.java
protected final void checkRequest(HttpServletRequest request) throws ServletException {
// Check whether we should support the request method.
String method = request.getMethod();
if (this.supportedMethods != null && !this.supportedMethods.contains(method)) {
throw new HttpRequestMethodNotSupportedException(method, this.supportedMethods);
}
// Check whether a session is required.
if (this.requireSession && request.getSession(false) == null) {
throw new HttpSessionRequiredException("Pre-existing session required but none found");
}
}
В этом методе supportedMethods
равен {GET, HEAD}
, и поэтому я получаю эту ошибку.
При проверке моего проекта Spring Boot 1.5.14 после пересылки запроса я даже не достигаю класса WebContentGenerator
, поэтому я думаю, что это как-то связано с обновленными классами во время миграции Spring 2.
Что изменилось в Spring Boot 2, что заставило меня получить эту ошибку и как я могу обойти это?
Спасибо и ценим помощь!