我正在服务器端使用Spring Boot。当我添加cookie来响应时,它会添加具有正确值的Set-cookie标头,但是当浏览器收到响应时,它将显示该标头,但不会设置cookie。邮递员也可以很好地存储所有cookie。
春季
public ResponseEntity<?> authenticate(@RequestBody AuthenticationRequest request, HttpServletResponse response) throws Exception {
Cookie cookie = new Cookie("token", "COOKIE_VALUE");
cookie.setHttpOnly(true);
cookie.setSecure(false);
response.addCookie(cookie);
return ResponseEntity.ok("Connection succeeded");
}
JSfetch(从不同端口的React应用程序获取)
var myHeaders = new Headers();
myHeaders.append("Content-Type", "application/json");
var raw = JSON.stringify({"username":"TestUser","password":"pwd"});
var requestOptions = {
method: 'POST',
headers: myHeaders,
body: raw,
redirect: 'follow'
};
fetch("http://IP_ADDRESS:8080/authenticate", requestOptions)
Firefox也是如此。我错过了什么?这个问题有方法解决吗?我正在使用端口8080而不是localhost获取Internet ip地址。但是本地主机也没有解决问题。
UPD。当端口相同时,似乎工作正常。我试图返回jsp页面,但该页面执行了fech语句,并且已存储了cookie。因此,解决方案可能是编译react app并将其放在服务器上。无论如何,当端口不相同时如何处理cookie?
确定,在春季靴中进行更改
@CrossOrigin
对此
@CrossOrigin(origins = "http://MY_IP_ADDRESS", allowCredentials = "true")
保存了我的一天。我仍然不明白为什么在帖子映射方法中按如下所示手动设置标题时为什么它不起作用]
response.addHeader("Access-Control-Allow-Credentials", "true");
response.addHeader("Access-Control-Allow-Origin", "http://MY_IP_ADDRESS");