JAX-RS,RestEasy:没有会话cookie

时间:2012-02-03 00:50:02

标签: jax-rs resteasy jboss7.x

民间,

当你点击servlet / jsp时,app服务器会自动启动会话。它会将会话cookie放在第一个动态响应中,并在整个过程中进行跟踪。

我有一个休息后端,我注意到没有会话cookie被交易。所以我手动添加代码来发送JSESSIONID cookie:

@Context 
private HttpServletRequest httpRequest;
// ...
@GET
@Path( "/{rcpGuid}" )
public Response myMethod( ... )
{
    final HttpSession session = httpRequest.getSession();
    final String sSessionId = session.getId();
    ...
    return Response.status( Response.Status.SEE_OTHER ).
        location( redirectUrl ).cookie( new NewCookie( "JSESSIONID", sSessionId ) );
}

现在这导致返回2个JSESSIONID cookie副本,之前没有Set-Cookie标头。这就是我现在在浏览器的检查员中看到的内容:

Set-Cookie:JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Path=/nn, JSESSIONID=sdm-Q1P6pRoQbKd4-9cJylGb; Version=1

只要这样可行,我就不在乎。但不幸的是,当我的浏览器请求将URL重定向到(注意响应是“SEE_OTHER”)时,该请求不具有会话ID。这导致我的应用程序无法正常运行。

任何见解?

2 个答案:

答案 0 :(得分:5)

  

当你点击servlet / jsp时,app服务器会自动启动会话。它会将会话cookie放在第一个动态响应中,并在整个过程中进行跟踪。

在调用httpRequest.getSession()之前,应用服务器不会创建会话。

  

我有一个休息后端,我注意到没有会话cookie被交易。所以我手动添加代码来发送JSESSIONID cookie:

在您的示例中,您致电getSession()并创建单独的jsessionid Cookie。这可以解释为什么你有两个饼干。如果你不这样做,你根本就没有jessionid

答案 1 :(得分:0)

如果它是REST后端,那么您不应该拥有JSESSIONID cookie并将后端端点保持为无状态。

从您的某个Web服务获取结果所需的所有信息都应包含在对Web服务的请求中。 Web服务是幂等的。