java - 从 servlet 打开受密码保护的网站

标签 java security networking web password-protection

该场景的预期用户将访问 servlet(例如 http://someip/myservlet ),该 servlet 反过来验证受密码保护的网站(例如 mysite.com - 托管在 IIS 服务器上,使用Windows 身份验证已启用)隐式然后打开mysite.com – 这样:

  1. 目标用户将不会收到输入用户名和密码的提示,因为他将通过 servlet(托管在 Tomcat 等服务器上)
  2. 任何其他用户访问 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/

相关文章:

Java ThreadPool 概念,以及控制实际线程数的问题

facebook - 有没有办法导出代码生成器 TOTP key 以与 Google 身份验证器应用程序一起使用?

azure - Terraform azurerm_kubernetes_cluster 无效或未知 key : network_profile

java - 将 Observables 收集到列表似乎不会立即发出集合

java - ScheduledThreadPoolExecutor 停止执行并捕获异常

java - TimerTask 和在 UI 线程上设置 View

security - 是否存在防止 cookie 被盗的方法?

python - 当命令的一部分来自用户输入时,在 Linux 服务器上执行命令的安全方法

java - 尝试使用本地代理类型连接到 SSH 服务器?

networking - 使用 xp 主机在 centos6 virtualbox 客户机上设置网络