java模拟带有重定向的帖子表单

时间:2011-10-13 07:47:44

标签: java servlets post redirect

我有一个登录表单的应用程序。在该应用程序中,有一个servlet可以执行登录接受用户名和密码(post,no get参数)并执行登录和设置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);

1 个答案:

答案 0 :(得分:0)

  1. 如果您没有使用JAAS来实现安全性

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

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