在jax-rs端点内创建cookie

时间:2015-04-29 11:22:26

标签: java cookies 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。

1 个答案:

答案 0 :(得分:1)

您可以创建javax.ws.rs.core.NewCookie。有许多不同的构造函数,只需通过API文档。

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

@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

enter image description here

如果您在尝试从客户端访问cookie时需要帮助(如评论中所示),那么这可能适用于SO上的其他问题。也许这个讨论不在话题,因为它将依赖于另一种技术。如果这不是你想要的,那么对你想要完成的事情做一个更好的解释会有所帮助。