在 jax-rs 端点内创建 cookie

Creating a cookie inside a jax-rs endpoint

我有一个 jax-rs 端点。端点的目的是授权用户。我需要在 cookie 中登录详细信息。下面我提到了我的代码的相关部分。

public Response authorize(@Context HttpServletRequest request) throws URISyntaxException {
     if (authnResult.isAuthenticated()) {
     //TODO create a cookie to maintain login state
                        Cookie authCookie = new Cookie(FrameworkConstants.COMMONAUTH_COOKIE, "test");
                        authCookie.setSecure(true);
                        authCookie.setHttpOnly(false);
                        authCookie.setMaxAge(5 * 60);
}

编辑:

这是我第一次创建cookie。我遵循了一些教程。在这些教程中,它已将创建的 cookie 添加到响应中。但是在端点内我无法访问响应。那么我该如何创建cookie呢?请多多指教

更新代码:

public Response authorize(@Context HttpServletRequest request) throws URISyntaxException {
    NewCookie cookie = new NewCookie("CookieName","CookieValue");
                    Response.ResponseBuilder builder = Response.ok("Cool Stuff");
                    builder.cookie(cookie);
                    Response response=builder.build();
    Cookie[] cookies = request.getCookies();
}

我需要知道的是如何访问新创建的cookie。

您可以创建一个 javax.ws.rs.core.NewCookie。有很多不同的构造函数,只需浏览 API 文档即可。

然后您可以通过ResponseBuilder#cookie(NewCookie)添加cookies。例如:

@GET
public Response getCookie() {
    NewCookie cookie = new NewCookie("Name", "Value", "path", "domain",
                                     "comment", 300, true, true);
    ResponseBuilder builder = Response.ok("Cool Stuff");
    builder.cookie(cookie);
    return builder.build();
}

更新(带有完整示例)

@Path("cookie")
public class CookieResource {
    
    @GET
    public Response getCookie(@CookieParam("A-Cookie") String cookie) {
        Response response = null;
        if (cookie == null) {
            response = Response.ok("A-Cookie: Cookie #1")
                    .cookie(new NewCookie("A-Cookie", "Cookie #1"))
                    .build();
            return response;
        } else {
            String cookieNum = cookie.substring(cookie.indexOf("#") + 1);
            int number = Integer.parseInt(cookieNum);
            number++;
            String updatedCookie = "Cookie #" + number;
            response = Response.ok("A-Cookie: " + updatedCookie)
                    .cookie(new NewCookie("A-Cookie", updatedCookie))
                    .build();
            return response;
        }
    }
}

请求38次后,即可看到结果。我使用了 Firefox 插件 Firebug。您可以看到发送的 cookie #37,返回的 cookie #38

如果您在尝试从客户端访问 cookie 时需要帮助(如您的评论中所建议),那么这可能适用于 SO 上的另一个问题。本次讨论可能离题,因为它将依赖于另一种技术。如果这不是您想要的,那么更好地解释您要完成的目标可能会有所帮助。