java - 更改 servlet header 并重定向到过滤器中的其他 url

标签 java http servlets http-headers

我是 servlet 的新手,我希望执行以下操作。

我在我的地方设置了一个过滤器:

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

当某些 url 与模式匹配时,将调用这些过滤器。

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

  1. 通过输入我知道的身份验证 key 来更改传入的请求 header

  2. 并在适当的地方使用该身份验证 header 将 request 重定向到其他 url,例如 www.test.com,以便该特定请求的响应将是www.test.com

  3. 的结果

有可能吗?

我试过这些:

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

但是这之后我该怎么办呢?如何将页面重定向到 google.com?

提前致谢。

最佳答案

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

要实现您的需求,最好的办法是充当代理。使用例如,以编程方式自己创建并触发 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.

关于java - 更改 servlet header 并重定向到过滤器中的其他 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14643287/

相关文章:

http - 一次只能登录 1 响应代码

java - 使网站的欢迎页面成为一个servlet

servlets - web.xml 404重定向到servlet,如何获取原始URI?

java - android定时器无论如何都可以工作

java - Spring Batch 中多个数据源的使用

未找到 java.net.malformedurlexception 协议(protocol)

angularjs - 如何使用 Angular 的 $resource 发送 POST 登录请求?

java - 在 Java 中根据字母频率创建字符数组的排列

java - 为什么使用Behavior渲染textField需要这么长时间

java - 如何在 JSP 页面中检索并显示数据库中的图像?