Следующий код в фильтре сервлетов сработал для нас. Идея состоит в том, чтобы переопределить любую логику перезаписи URL с помощью пользовательской оболочки ответа.
public void doFilter(
ServletRequest req,
ServletResponse resp,
FilterChain filterChain )
throws IOException, ServletException
{
if ( req instanceof HttpServletRequest &&
resp instanceof HttpServletResponse )
{
doFilter(
(HttpServletRequest) req,
(HttpServletResponse) resp,
filterChain );
}
else
{
filterChain.doFilter( req, resp );
}
}
private void doFilter(
HttpServletRequest request,
HttpServletResponse response,
FilterChain filterChain )
throws IOException, ServletException
{
RequestHandler requestHandler = getRequestHandler( request );
HttpServletResponse wrappedResponse = getWrappedResponse( response );
filterChain.doFilter( request, wrappedResponse );
}
private HttpServletResponse getWrappedResponse(
HttpServletResponse response )
{
return
new HttpServletResponseWrapper( response )
{
public String encodeRedirectUrl( String url ) { return url; }
public String encodeRedirectURL( String url ) { return url; }
public String encodeUrl( String url ) { return url; }
public String encodeURL( String url ) { return url; }
};
}