java模拟带有重定向的post表单

java模拟带有重定向的post表单,java,servlets,post,redirect,Java,Servlets,Post,Redirect,我有一个带有登录表单的应用程序。在该应用程序中有一个servlet,它可以执行登录,接受用户名和密码,不获取参数,执行登录并设置Jsession cookie 当我使用表单post调用这个servlet时,它会工作 但我有另一个应用程序,我想重定向并自动登录到第一个应用程序。这将用于演示,因此将使用静态用户名和密码。但是我不希望用户能够看到用户名和密码。因此,我想在Java中使用post 这在一定程度上是可行的,在帖子完成并登录之后,我重定向到应用程序1中的一个页面。但是我不再登录了。 我想这与

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

当我使用表单post调用这个servlet时,它会工作

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

这在一定程度上是可行的,在帖子完成并登录之后,我重定向到应用程序1中的一个页面。但是我不再登录了。 我想这与域名有关。应用程序1和2不在同一个域上

我如何解决我的问题

下面是我用来执行post请求的代码

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);
如果您没有使用JAAS来实现安全性

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

检查Servlet容器或应用程序服务器是否支持编程登录。因此,您可以在App2中以编程方式登录到App1的相同安全域。 检查Servlet容器或应用程序服务器是否支持SSO。这使您能够配置两个应用程序以使用相同的安全域,并且当用户在App1中登录时,也会自动在App2中登录。如果执行此操作,请检查注销行为
登录由应用程序2执行,而不是由用户执行。是和否:应用程序1中的登录由应用程序1完成。但是它是从应用程序2调用的,不是由用户调用的。是的,这就是我的意思。这就是用户未登录的原因。我如何解决我的问题?