2011-10-13 40 views
1

我有一个登录表单的应用程序。在那个应用程序中,有一个servlet可以执行登录接受用户名和密码(post,no get parameters)并执行登录并设置Jsession cookie。java用重定向模拟帖子表格

当我用表单发布它的这个servlet时,它就起作用了。

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

这部分工作,部分完成后(登录完成)后,我重定向到应用程序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); 
+0

登录由应用2 perfomed,而不是用户。 – WilQu

+0

是和否:)应用程序1中的登录由应用程序1完成。但它是从应用程序2调用的,而不是由用户调用的。 – roel

+0

是的,这就是我的意思。这就是为什么用户没有登录。 – WilQu

回答

0
  1. 如果你不使用JAAS对实现安全

    • 当然,当你在应用1做验证码您在HttpSession中存储一个标志,以便知道用户是否已通过身份验证,以避免在进一步的请求中需要登录。所以ServletContainer管理HttpSession使用不同的机制(最常见的cookie)自动发送到浏览器的会话ID。
    • 让我们假设Servlet容器使用cookie来管理HttpSession(会话ID)。当你的App2进行登录(并且它是成功的)时,你不会将该cookie与会话ID一起存储以供进一步请求。
    • 您需要检查管理会话ID的机制,并复制App2中的浏览器行为以获取更多请求。
  2. 如果您使用JAAS来实现安全性。您有两种选择:

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