Итак, вы на самом деле делаете перенаправление, хотя кажется, что вы просто хотите перенаправить запрос на сопоставление другого контроллера.
res.sendRedirect ("b");
Просто измените код ответа на 302
и добавьте location
поле, вы все равно нажмете первый контроллер, поэтому вы все еще видите a
в журналах. Затем браузер подтверждает эту директиву перенаправления и отправляет второй запрос на /b
.
. Один из способов добиться того, чего вы хотите, - создать новый запрос из отправленного и просто переопределить getRequestUri()
метод.
@Override
public void doFilter (ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException
{
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
String path = req.getRequestURI();
if (path.equals("/a")) {
req = new HttpServletRequestWrapper((HttpServletRequest) request) {
@Override
public String getRequestURI() {
return "/b";
}
};
}
chain.doFilter (req, res);
}
Затем он передается в цепочку фильтров, и все продолжается, как если бы это был исходный запрос