如何使用过滤器或servlet更改requestURL

use*_*911 5 url port servlets request servlet-filters

如何使用过滤器或servlet更改requestURL.

例如,如果请求是"http:// servername1:8080"我想将其更改为"http:// servername2:7001"

Tom*_*icz 13

将以下servlet过滤器添加到您的应用程序:

public class RequestUrlRewritingFilter implements Filter {

    //Empty init()/destroy() here

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        final HttpServletRequestWrapper wrapped = new HttpServletRequestWrapper(request) {
            @Override
            public StringBuffer getRequestURL() {
                final StringBuffer originalUrl = ((HttpServletRequest) getRequest()).getRequestURL();
                return new StringBuffer("http://servername2:7001");
            }
        };
        chain.doFilter(wrapped, response);
    }
}
Run Code Online (Sandbox Code Playgroud)

您要拦截的所有请求都必须通过它.正如您所看到的,它通过返回不同的值来采用原始request方法和覆盖getRequestURL()方法.如果要在旧URL上建立新URL,您仍然可以访问原始请求.

最后,您必须继续处理请求,chain.doFilter()但提供包装请求,而不是原始请求.