我正在开发身份验证解决方案,我想设置一个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库的例子很棒。我不介意自己设置,但我想尽可能使用库。
答案 0 :(得分:1)
几条评论:
我多年前使用过Axis,所以我对CXF的了解不强(或不存在),但似乎服务的传输与实际服务本身是分开的。那么这是一个http传输问题吧?
因此,您正在使用J2EE容器,并且(以某种方式)访问HttpServletRequest和HttpServletResponse。
在这种情况下,我会问为什么不使用:
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();