更改servlet标头并重定向到过滤器中的其他URL

时间:2013-02-01 09:34:53

标签: java http servlets http-headers

我是servlet的新手,我希望做到以下几点。

我在我的位置设置了过滤器:

void doFilter( ServletRequest request, 
               ServletResponse response, 
               FilterChain chain ) throws IOException, ServletException 
{
}

当某个网址与模式匹配时,系统会调用这些过滤器。

在这个方法中,我希望这样做:

  1. 通过添加我知道的authenticaton密钥来更改传入的request标头

  2. 使用该身份验证标头将request重定向到其他网址www.test.com,以便该特定请求的响应将是www.test.com的结果

  3. 是否可以这样做?

    我试过这些:

    response.setHeader("WWW-Authenticate","Basic MyKey")
    response.setHeader("Location","www.google.com")
    

    但在此之后该怎么办?如何将网页重定向到google.com?

    提前致谢。

1 个答案:

答案 0 :(得分:1)

那是(幸运的是)不可能。如果您可以作为Web服务器控制Web客户端向任意域发出的HTTP请求的标头,那将是一个巨大的安全漏洞。它会使网络钓鱼变得非常容易。

为了实现您的需求,您最好的选择是充当代理人。使用例如编程方式自己创建和激活HTTP请求URLConnection或Apache HTTPComponents客户端并管理其对servlet响应的响应。但请注意,浏览器地址栏中的URL保留了Web服务器的URL。

以下是使用URLConnection的启动示例:

URLConnection connection = new URL("http://other.com").openConnection();
// Set headers if necessary via setRequestProperty().

InputStream input = connection.getInputStream();
OutputStream output = response.getOutputStream();
// Copy response body from input to output.