【问题标题】:How to redirect to another host from Filter?如何从过滤器重定向到另一台主机?
【发布时间】:2014-04-26 22:48:36
【问题描述】:

如何将请求从过滤器转发到另一个 URL 并返回结果?

我正在使用FilterHttpClient.execute() 方法来转发请求。这样的方式对吗?

代码如下:

public void doFilter(ServletRequest req, ServletResponse response, FilterChain chain)
...
HttpRequestBase method = null;
URI uri = null;
if (isPost) {
    method = new HttpPost();
} else {
    method = new HttpGet();
}

uri = new URI(newUrl);    

Enumeration<String> headerNames = request.getHeaderNames();

 while (headerNames.hasMoreElements()) {
    String header = headerNames.nextElement();    
    method.setHeader(header, request.getHeader(header));    
}
method.setURI(uri);

HttpResponse downstreamResponse = httpClient.execute(method);

ByteArrayOutputStream baos = new ByteArrayOutputStream(2048);
downstreamResponse.getEntity().writeTo(baos);
OutputStream responseStream = response.getOutputStream();
responseStream.write(responseBytes);

【问题讨论】:

    标签: java servlets redirect httpresponse servlet-filters


    【解决方案1】:

    在你的

    doFilter(ServletRequest req, ServletResponse res,
                FilterChain chain) 
    

    你会收到ServletResponse

    所以您可以将其转换为 HttpServletResponse

    HttpServletResponse httpResponse = (HttpServletResponse) res;
    httpResponse.sendRedirect("/login.jsp");
    

    【讨论】:

    • 我已将代码添加到问题中。问题是重定向到其他主机。并且请求是 SOAP 请求。
    • 所以不是转发,而是记录?
    • 没有。问题是我需要根据 SOAP 消息中的某些条件将请求重定向到其他 url。所以我使用了过滤器。
    • 在架构上听起来很狡猾/缓慢
    猜你喜欢
    • 1970-01-01
    • 2020-06-09
    • 2020-07-19
    • 2014-06-16
    • 2010-10-07
    • 2015-03-25
    • 2017-05-23
    • 2015-03-11
    • 2017-04-30
    相关资源
    最近更新 更多