【问题标题】:HttpConnection maintaining SessionHttpConnection 维护 Session
【发布时间】:2017-08-20 23:49:46
【问题描述】:

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

【问题讨论】:

  • 当你说“HttpConnection”时,你真的是指HttpURLConnection吗?如果是这样,请继续:stackoverflow.com/questions/2793150/…
  • 不...不幸的是我使用的是JavaME,这就是为什么它是HttpConnection
  • 在我的标题中,我收到了类似这样的标题:1,Set-Cookie:JSESSIONID=C2j31psXI5bEhlXwXdormU3L;路径=/简单登录;安全
  • 您需要将其作为标题发回,名称为Cookie,值为JSESSIONID=C2j31psXI5bEhlXwXdormU3L
  • 发现问题..因为它是JavaME httpConnection,所以标头设置如下:connection.setRequestProperty("Cookie","sessionId="+ApplicationPreferences.getInstance().getSessionCookieHeader()) ; connection.setRequestProperty("Cookie","JSESSIONID="+ApplicationPreferences.getInstance().getJavaSessionCookieHeader());但是它覆盖了 Cookie 属性,我怎样才能添加许多具有相同名称的请求属性??

标签: java tomcat java-me session-cookies httpconnection


【解决方案1】:

cmets 是正确的...要保持会话,您只需在下一个请求中将 JSESSIONID cookie 发送回服务器,这种情况下的问题是 JavaME 中的 HttpConnection 只有 setRequestProperty 方法来包含标头值,现在如果你设置相同的值两次,它会覆盖最后一个。由于我使用的是自定义 cookie 和 JSessionID cookie,因此我按以下方式设置它们:

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(); 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-28
    • 1970-01-01
    • 2014-08-28
    • 2011-02-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多