我是 servlet 的新手,我希望执行以下操作。
我在我的地方设置了一个过滤器:
void doFilter( ServletRequest request,
ServletResponse response,
FilterChain chain ) throws IOException, ServletException
{
}
当某些 url 与模式匹配时,将调用这些过滤器。
在这个方法中,我希望这样做:
通过输入我知道的身份验证 key 来更改传入的
请求
header并在适当的地方使用该身份验证 header 将
request
重定向到其他 url,例如www.test.com
,以便该特定请求的响应将是www.test.com
的结果
有可能吗?
我试过这些:
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/