Spring @RestController未设置响应的cookie

我有以下剩余端点,我想随同我的cookie一起发送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));

}

MyCustomResponse

class MyCustomResponse {

private final String token;

public MyCustomResponse(String token) {

this.token = token;

}

}

我也尝试过ResponseEntity手动创建标题,并在"Set-Cookie"标头中设置Cookie,但标头是一样的,没有cookie。

:我已经确认Set-

Cookie响应中确实存在标头,但是实际上并没有将其存储在浏览器中。我正在使用在WebStorm中运行的静态Web应用程序来访问在其他端口上运行的其余端点。该Web应用程序仅使用JQuery的$ajax方法来调用REST端点,一点也不花哨。当我在WebStorm中运行Web应用程序时,可以在浏览器中看到它创建的cookie,从而确认我的浏览器允许cookie存储。

回答:

我想到了。我用来访问我的rest api的Web应用程序在与我的rest

api不同的本地端口上运行。这将导致AJAX请求无法满足CORS要求,因此cookie实际上并未设置。

:我应该补充一点,它是在为我固定的xhrFieldsJQuery $ajax方法中添加了代码段,其他部分则没有必要。

我想我找到了解决方案。由于在开发过程中,我的服务器位于“ localhost:30002”,而我的Web应用程序位于“

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被存储。

以上是 Spring @RestController未设置响应的cookie 的全部内容, 来源链接: utcz.com/qa/426734.html

回到顶部