我有以下休息端点,我想将 cookie 与我的ResponseEntity
。然而,在成功发送响应后,却找不到 cookie。
@RequestMapping(value = "myPath", method = RequestMethod.POST)
public ResponseEntity<?> createToken(HttpServletResponse response)
final String token = "a1b2c3d4e";
Cookie cookie = new Cookie("token", token);
response.addCookie(cookie);
// Return the token
return ResponseEntity.ok(new MyCustomResponse(token));
}
我的自定义响应
class MyCustomResponse {
private final String token;
public MyCustomResponse(String token) {
this.token = token;
}
}
我也尝试过创建ResponseEntity
手动并在标头中设置 cookie"Set-Cookie"
header 但同样的事情,没有 cookie。
edit: 我已经确认了Set-Cookie
标头实际上存在于响应中,但实际上并未存储在浏览器中。我正在使用在 WebStorm 中运行的静态 Web 应用程序来访问在不同端口上运行的其余端点。这个网络应用程序只是使用 JQuery 的$ajax
调用 REST 端点的方法,没什么花哨的。当我在 WebStorm 中运行 Web 应用程序时,我可以看到它在浏览器中创建的 cookie,从而确认我的浏览器允许 cookie 存储。
我想到了。我用来访问其余 api 的 Web 应用程序与我的其余 api 运行在不同的本地端口上。这会导致 AJAX 请求无法满足 CORS 要求,因此实际上并未设置 cookie。
我在这里找到了解决方案什么会导致客户端无法设置 cookie? https://stackoverflow.com/questions/14801021/what-can-cause-a-cookie-not-to-be-set-on-the-client
edit:我应该补充一点,它添加了xhrFields
JQuery 的片段$ajax
为我修复它的方法,其他部分不是必需的。
(在下面发布答案,以防被删除)
我想我找到了解决方案。由于在开发过程中,我的服务器位于“localhost:30002”,我的网络应用程序位于“localhost:8003”,因此它们被认为是不同的关于 CORS 的主机。因此,我对服务器的所有请求都受到 CORS 安全规则的覆盖,尤其是。 “凭据”包括该链接上注明的 cookie,因此返回的 cookie 未被接受,因为我没有通过
xhrFields: {
withCredentials: true
}
到 jQuery 的$.ajax
功能。我还必须将该选项传递给后续的 CORS 请求才能发送 cookie。
我添加了标题Access-Control-Allow-Credentials: true
在服务器端并更改了Access-Control-Allow-Origin
标题从通配符到http://localhost:8003
(端口号很重要!)。该解决方案现在适用于我,并且 cookie 已被存储。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)