【发布时间】:2018-08-29 07:11:55
【问题描述】:
我正在使用 Jersey 和 JBoss 用 Java 开发 RESTful Web 服务,我需要像在 PHP 中一样存储“会话变量”。维护客户端的会话,但不使用 cookie。
@Context
private UriInfo context;
@Context
private HttpServletRequest httpRequest;
@Path("/firstPage")
@GET
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public String createInstance(@QueryParam("instance") String inst)
throws JSONException
{
// Here I "declare" the session variable
HttpSession session = httpRequest.getSession(true);
session.setAttribute("instance", inst);
// Creation of the DTO (Data Transfer Object)
JSONObject innerObj = new JSONObject();
JSONObject outterObj = new JSONObject();
innerObj.put("ContactID", "{{Contact.Id}}");
innerObj.put("EmailAddress", "{{Contact.Field(C_EmailAddress)}}");
outterObj.put("recordDefinition", innerObj);
return outterObj.toString();
}
@Path("/secondPage")
@GET
@Consumes(MediaType.TEXT_PLAIN)
@Produces(MediaType.APPLICATION_JSON)
public String validateInstance(@QueryParam("instance") String inst)
throws JSONException
{
// Here I "validate" the session variable
HttpSession session = httpRequest.getSession(true);
if ((String)session.getAttribute("instance") == inst) {
JSONObject obj= new JSONObject();
outterObj.put("status", 200);
outterObj.put("instance", inst);
return obj.toString();
} else {
JSONObject obj = new JSONObject();
obj.put("error", 401);
return obj.toString();
}
}
这是我所做的,但它没有按我预期的那样工作。有什么解决办法吗?
【问题讨论】:
-
注入
HttpServletRequest并使用getSession()获取HttpSession。在 that 上设置你的属性。请注意,在后台,cookie 用于维护会话。这就是会话的工作方式。 -
@PaulSamsotha 我将
@Context private HttpServletRequest httpRequest;放在开头,然后将HttpSession session = httpRequest.getSession(); session.setAttribute("instance", inst);设置为会话属性。但是当我试图得到它时,什么也没有发生。HttpSession session = httpRequest.getSession(); String instance = (String)session.getAttribute("instance"); -
你用什么来测试?尝试将
true作为参数传递给getSession(true) -
@PaulSamsotha 我更新了代码,所以你现在可以看到它的样子。
-
你用什么客户端来测试?发生的情况是响应中发送了一个 JSESSIONID cookie。客户端需要将该 cookie 发回,否则将找不到会话。
标签: java jboss jersey glassfish session-variables