登录后在REST中提取JSESSIONID

Extract JSESSIONID in REST after login

我正在开发允许用户创建的系统 workspaces.After 工作区创建用户可以通过提供用户名、密码和工作区登录。 我需要登录后生成的 jsessionid 来创建工作区和 jsessionid 之间的连接。

登录通过 REST。

    @POST
    @Path("login")
    @Produces(ContentType.APPLICATION_JSON_CHARSET_UTF_8)
    public JsonObject login(LoginCredentials loginCredentials) throws UnAuthorizedException {
        //login logic
    }

我还有实现 ContainerResponseFilter、WriterInterceptor 的拦截器。

@Override
    public void filter(ContainerRequestContext requestContext, ContainerResponseContext context)throws IOException {
        //...
    }

如何生成 jsessionid(我在响应中看到 header)?

在您的拦截器中,您可以获取服务请求并提取 Headers 或您放入请求中的任何内容(因此您的 JSESSIONID 也是如此):

HttpServletRequest request = (HttpServletRequest) message
            .getExchange().getInMessage()
            .get(AbstractHTTPDestination.HTTP_REQUEST);

如果您有一个 http 请求对象,您可以获得关联的会话。获得会话后,您可以获得它的 id

request.getSession(true).getId()

true 传递给 getSession 会导致创建一个新会话(如果会话尚不存在)。

假设您将 Jersey 用于 REST 服务,您可以使用例如

@Context HttpServletRequest request

在您的服务方法签名中,以便访问响应 headers。 看一眼 https://jersey.java.net/documentation/latest/jaxrs-resources.html#d0e2742Under what conditions is a JSESSIONID created?(这个是关于JSessionID的)