Jersey中的会话变量(Java / JBoss)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Jersey中的会话变量(Java / JBoss)相关的知识,希望对你有一定的参考价值。

我正在使用Jersey和JBoss开发一个Java的RESTful Web服务,我需要像php一样存储“Session变量”。保持客户的会话但不使用coockies。

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

这是我做的,但它没有像我预期的那样工作。有解决方案吗

答案

正如有人已经指出的那样:会话使用cookie来处理,该cookie包含php用于将客户端连接到会话的会话ID。

为您的java休息服务。根据定义,会议不是休息服务的一部分,甚至不鼓励。

请参阅其他架构的原始文档:https://www.ics.uci.edu/~fielding/pubs/dissertation/rest_arch_style.htm

5.1.3无国籍

接下来我们为客户端 - 服务器交互添加一个约束:通信本质上必须是无状态的,...从客户端到服务器的请求必须包含理解请求所需的所有信息,并且不能利用任何存储的上下文。服务器。因此,会话状态完全保留在客户端上。

是否有任何理由反对在请求之间获取创建的数据并将它们附加到第二个请求?

以上是关于Jersey中的会话变量(Java / JBoss)的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat 7/JBoss7 的自定义会话 ID 生成器

JBoss JNDI 绑定中的环境变量

使用 Jersey 的 RESTful Web 服务的会话管理

为啥从 JBoss 7.1.0EAP 到 Oracle 11g 生成了 100 个幽灵 Oracle 会话

为 Jersey 代理客户端解析资源接口中的模板变量

javax.jms.JMSException:在向JBoss EAP 7.2中的嵌入式ActiveMQ Artemis发送消息时,未能创建会话工厂。