JAVA:需要服务器端Cookie创建器

时间:2013-11-12 23:35:14

标签: java cookies

我正在开发身份验证解决方案,我想设置一个cookie。该站点使用Apache CXF,因此我假设Ill构造响应并设置“Set-Cookie”标头。我正在寻找的是一个Java库,它允许我创建一个cookie,然后将其渲染为一个可接受标题的字符串。我查看了HttpCookie docs,但这似乎是关于从现有的cookie字符串中读取cookie。我可能在这里错了,但构造函数似乎暗示了这种情况:

public HttpCookie(String name, String value)

Constructs a cookie with a specified name and value.

要完成我需要的库,有哪些库?请不要关闭,因为没有建设性,我不是要求最好的,或任何人喜欢的cookie创建库。我对可用的库有点困惑。另外一个使用cookie库的例子很棒。我不介意自己设置,但我想尽可能使用库。

2 个答案:

答案 0 :(得分:1)

几条评论:

  1. 我多年前使用过Axis,所以我对CXF的了解不强(或不存在),但似乎服务的传输与实际服务本身是分开的。那么这是一个http传输问题吧?

  2. 因此,您正在使用J2EE容器,并且(以某种方式)访问HttpServletRequest和HttpServletResponse。

  3. 在这种情况下,我会问为什么不使用:

    javax.servlet.http.Cookie
    javax.servlet.http.HttpServletRequest.getCookie()
    javax.servlet.http.HttpServletResponse.setCookie() or .addCookie()
    

    请注意,使用cookie来维护与服务相关的状态必须具有一些重复的代码,这些代码保持相同的状态以便在其他传输中使用。

    如果我所说的是无关紧要的,那么你是如何进入CXF服务并且还可以访问http连接中的原始内容,以便直接写入?如果您有ServletRequest / ServletResponse,那么您应该能够内省它们并发现它们实际上是http版本。如果您有一个流,我会搜索cxf服务文档并了解如何访问传输请求/响应机制,而不是尝试使用正确的头来直接向流指定cookie。

    根据你的问题如下。是的,它就像设置标题一样简单:

    Set-Cookie: SID=31d4d96e407aad42; Path=/; Domain=example.com
    

    但是如果您使用我提到的Java Servlet API,您可以执行以下操作:

    javax.servlet.http.Cookie cookie = new Cookie("SID","31d4d96e407aad42");
    cookie.setDomain("example.com");
    cookie.setPath("/");
    response.addCookie(cookie);
    

    如果您使用我不熟悉的CookieBuilder功能从Apache使用HttpComponents API,那么类似的东西。

答案 1 :(得分:0)

您可以通过添加HTTP标头“Set-Cookie”来设置cookie:

 Set-Cookie: name=value

HTTP标头可以按照this SO问题中的讨论进行修改。或者,如果更详细的话,正如@David Williams提出的那样:

return Response
    .ok()
    .header("Set-Cookie", cookiestring)
    .build();