【问题标题】:How do I get a protected web resource from a java client如何从 Java 客户端获取受保护的 Web 资源
【发布时间】:2012-01-18 18:27:56
【问题描述】:

我有一个使用基于表单的身份验证的 Java Web 应用程序。如果标准 Web 用户访问我的站点,他们将被重定向到 login.jsp,他们提交他们的凭据,然后将资源提供给他们。

我有一个简单的 Java 客户端,有时需要将信息发布到我的 Web 应用程序。当我的 java 客户端发布信息时,服务器会发回我期望的 login.jsp。我可以使用凭据向 j_security_check 提交第二个请求,但我发送的任何其他请求仍然会通过,就好像我未经身份验证一样。

我知道浏览器将会话信息存储在标头中并将其传输到服务器以帮助维护状态,但是我如何从 java 客户端执行类似的操作,以便对后续请求进行身份验证。

【问题讨论】:

  • 您需要维护会话,以便服务器知道您。寻找 cookie。

标签: java webclient session-state credentials


【解决方案1】:

发生这种情况是因为您没有发送 cookie。

当您第一次使用服务器时,它会为您创建会话。会话具有 ID。此 ID 作为特殊 cookie 发送给客户端,例如服务器发送 HTTP 头 Set-Cookie。通常基于 java 的服务器使用名为 jsessionid 的 cookie,但实际上并不重要。您在客户端应该获取响应标头Set-Cookie 的值并使用HTTP 标头Cookie 将其发送回。在这种情况下,服务器将在同一会话的上下文中处理您的第二个和第三个(等)请求。您的第二个请求(登录表单的帖子)使会话经过身份验证,因此您不会一次又一次地被重定向到登录表单。

如果您可以配置服务器端,则可以更轻松。服务器也应该配置为支持基本身份验证(除了基于表单的身份验证)。因此,您的客户可以发送标头Authorization,其值为Basic USER:PASSWORD 其中 USER 和 PASSWORD 应以 Base64 格式发送。

编辑:您可以使用 Jakarta HttpClient。当您处理 HTTP 时,它可以简化一切。但是标准的 Java HttpURLConnection 也可以完成这项工作。

【讨论】:

    猜你喜欢
    • 2021-07-31
    • 2017-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    • 2015-09-05
    • 1970-01-01
    相关资源
    最近更新 更多