该场景的预期用户将访问 servlet(例如 http://someip/myservlet ),该 servlet 反过来验证受密码保护的网站(例如 mysite.com - 托管在 IIS 服务器上,使用Windows 身份验证已启用)隐式然后打开mysite.com – 这样:
- 目标用户将不会收到输入用户名和密码的提示,因为他将通过 servlet(托管在 Tomcat 等服务器上)
- 任何其他用户访问 link text在不知道凭据的情况下将无法访问
要求是 (它必须打开该网站而不是获取内容,因为 mysite.com 具有动态功能)
Java 中可能吗(HttpURLConnection)?
感谢任何帮助。
谢谢。
最佳答案
为了确保我理解您的需求,这里有一个摘要: 您希望给定用户 A 连接到您的第一台服务器 Server1.domain1.com,该服务器将(从 java 服务器内部)连接到第二台服务器 server2.domain2.com(当前位于 IIS 下)。然后 server1 会将用户转发到 server2 网页,挑战是避免任何身份验证弹出窗口。
根本问题是从服务器 1 到客户端浏览器,再从客户端浏览器到服务器 2,传输服务器 1 从服务器 2 获得的身份验证票据。
这并不是一个具体的 java 问题,而是一个全局性的 WEB 问题。事实上,server2 接收到的用于识别客户端用户的唯一信息是在 http 流中,简而言之就是 IP 地址、URL 和 cookie。
如果 server1 和 server2 不是同一个域(请参阅 RFC 2109 : http://www.ietf.org/rfc/rfc2109.txt ),Cookie 就是一个死胡同,因为仅当 cookie 从服务器返回时,浏览器才会将 cookie 发送到给定域的服务器(相同或另一个)相同的域。
所以答案是一个两步过程:
- 首先,server1 应该从 server2 获取 sessionID,可能是通过使用适当的凭据提交 http 请求(基本身份验证?表单字段?或者最糟糕的是,“类似 Windows 的域身份验证”?)。对于此步骤,我建议使用 apache httpclient 库。
- 其次,server1 应该将客户端用户转发到 server2 的适当 URL,其中包含 sessionID 作为参数。它要求server2提供这样的可能性才能进入。
乍一看,我没有看到其他简单的解决方案。
关于java - 从 servlet 打开受密码保护的网站,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1042904/