2011-12-12 108 views
2

我有一个使用基于表单的身份验证的java web应用程序。如果一个标准的Web用户访问我的网站,他们会被重定向到login.jsp,他们会提交他们的凭证,然后资源就会被分配给他们。如何从java客户端获得受保护的Web资源

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

我知道浏览器在背部和泡沫的服务器,以帮助保持状态页眉和传输存储会话信息,但我怎么做从Java客户端,以便后续请求的身份验证类似。

+0

您需要维护会话,以便服务器知道您的身份。寻找饼干。 –

回答

3

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

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

如果你可以配置服务器端,你可以更容易。服务器也应配置为支持基本身份验证(另外还需要基于身份验证)。所以,你的客户端可以与价值Basic USER:PASSWORD 其中USER PASSWORD &应以Base64编码形式发送发送头Authorization

编辑:你可以使用雅加达HttpClient。它在处理HTTP时简化了一切。但标准的Java HttpURLConnection也可以完成这项工作。