2012-02-03 116 views
0

我正在使用Rest体系结构消耗一些在java中完成的Web服务,我的客户端是使用HttpConnection来检索数据的移动应用程序。为了控制身份验证和授权,我使用Cookie,由@SessionScoped类管理,但我不知道如何通过请求使会话持续存在。问题的根本在于我在其他服务中注入了Session管理器,但是由于会话没有持久化,我总是为@SessionScoped类检索不同的实例,从而删除了之前的所有cookie或记录。查看请求标头,我注意到了JSESSIONID的Cookie,我认为这是由tomcat发送的,以便持久化会话,所以尝试在下一个请求中发送相同的cookie,但是我没有得到任何结果。HttpConnection维护会话

+0

当你说“HttpConnection”时,你是否确实是指'HttpURLConnection'?如果是这样,请继续阅读:http://stackoverflow.com/questions/2793150/how-to-use-java-net-urlconnection-to-fire-and-handle-http-requests – BalusC 2012-02-03 16:28:17

+0

不......不幸的是我使用JavaME,这就是为什么它是HttpConnection – Pablo 2012-02-03 16:54:13

+0

在我的头我接收这样的事情头:1,设置Cookie:JSESSIONID = C2j31psXI5bEhlXwXdormU3L;路径= /简单的登录; Secure – Pablo 2012-02-03 16:58:52

回答

0

评论是正确的......要坚持一个会话,您只需在下一个请求中将JSESSIONID cookie发送回服务器,这种情况下的问题是JavaME中的HttpConnection只有setRequestProperty方法才能包含头值,现在如果您将相同的值设置为两次,它将覆盖最后一个值。由于我使用的是自定义的cookie和JSESSIONID饼干,我设置好的他们通过以下方式:

connection.setRequestProperty("Cookie","sessionId="+ApplicationPreferences.getIn‌​stance().getSessionCookieHeader()); 
connection.setRequestProperty("Cookie","JSESSIONID="+ApplicationPreferences‌​.getInstance().getJavaSessionCookieHeader()); 

当正确的方式做到这一点是串联cookie的字符串,然后设置与他们全部Cookie头:

String myCookies="sessionId="+ApplicationPreferences.getInstance().getSessionCookieHead‌​er()+";"+"JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeade‌​r();