在 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 上的另一个问题。本次讨论可能离题,因为它将依赖于另一种技术。如果这不是您想要的,那么更好地解释您要完成的目标可能会有所帮助。
我有一个 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 上的另一个问题。本次讨论可能离题,因为它将依赖于另一种技术。如果这不是您想要的,那么更好地解释您要完成的目标可能会有所帮助。