【问题标题】:java simulate post form with redirectjava用重定向模拟post表单
【发布时间】:2011-12-06 17:58:34
【问题描述】:

我有一个带有登录表单的应用程序。在该应用程序中,有一个 servlet 可以执行登录,接受用户名和密码(post,没有获取参数)并执行登录并设置 Jsession cookie。

当我使用表单发布调用此 servlet 时,它可以工作。

但我有另一个应用程序,我想重定向并自动登录到第一个应用程序。这将用于演示,因此将使用静态用户名和密码。但我不希望用户能够看到用户名和密码。因此我想用 Java 写一篇文章。

这部分工作,在帖子完成后(登录),我重定向到应用程序 1 中的页面。但是我不再登录了。 我想这与域有关。应用程序 1 和 2 不在同一个域中。

如何解决我的问题?

这是我用来执行发布请求的代码

getLog().debug("Open the connection to remote URL(" + remoteURL + ")");
URL url = new URL(remoteURL);

HttpURLConnection connection = (HttpURLConnection) url.openConnection();

connection.setRequestMethod("POST");
connection.setAllowUserInteraction(false);

connection.setDoOutput(true);
OutputStreamWriter wr;
wr = new OutputStreamWriter(connection.getOutputStream());

wr.write(requestParameters);
wr.flush();
wr.close();

response.sendRedirect(redirectURL);

【问题讨论】:

  • 登录由应用程序 2 执行,而不是由用户执行。
  • 是,也不是 :) 应用程序 1 的登录是由应用程序 1 完成的。但它是从应用程序 2 调用的,而不是由用户调用的。
  • 是的,我就是这个意思。这就是用户没有登录的原因。
  • 我该如何解决我的问题?

标签: java servlets post redirect


【解决方案1】:
  1. 如果您不使用 JAAS 来实现安全性

    • 当然,当您在 App1 中进行身份验证时,您会在 HttpSession 中存储一个标志以了解用户是否已通过身份验证,以避免在进一步请求时需要登录。因此 ServletContainer 管理 HttpSession 使用不同的机制(最常见的 cookie)自动向浏览器发送会话 ID。
    • 假设 Servlet 容器正在使用 cookie 管理 HttpSession(会话 ID)。当您的 App2 进行登录(并且成功)时,您不会存储带有 Session Id 的 cookie 以供进一步请求。
    • 您需要检查管理会话 ID 的机制并在 App2 中复制浏览器行为以获取更多请求。
  2. 如果您使用 JAAS 来实现安全性。你有两个选择:

    • 检查您的 Servlet 容器(或应用程序服务器)是否支持编程登录。因此,您可以在 App2 中以编程方式登录到与 App1 相同的安全领域。
    • 检查 Servlet 容器(或应用程序服务器)是否支持 SSO。这让您可以将两个应用程序配置为使用相同的安全领域,并且当用户在 App1 中登录时,也会自动在 App2 中登录。 (如果您这样做,请检查注销行为)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 1970-01-01
    • 2013-08-17
    • 2020-02-17
    • 2015-12-02
    • 2013-12-31
    • 1970-01-01
    相关资源
    最近更新 更多