提问人:Asif 提问时间:11/16/2023 最后编辑:Asif 更新时间:11/16/2023 访问量:16
React native fetch web 平台 Spring boot Set-Cookie 未设置
React native fetch web platform Spring boot Set-Cookie not set
问:
我阅读了很多关于这个问题的 SO 文章,并尝试了很多解决方案,但仍然无法解决这个问题。这是我的Spring Boot代码:
@Override
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
HttpServletRequest request = (HttpServletRequest) req;
response.setHeader("Access-Control-Allow-Origin", "http://localhost:19006");
response.setHeader("Access-Control-Allow-Methods", "POST, PUT, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "3600");
response.setHeader("Access-Control-Allow-Headers", "x-requested-with, authorization, Content-Type, Cookie");
response.setHeader("Access-Control-Expose-Headers","*");
response.setHeader("Access-Control-Allow-Credentials", "true");
if ("OPTIONS".equalsIgnoreCase(request.getMethod())) {
response.setStatus(HttpServletResponse.SC_OK);
} else {
chain.doFilter(req, res);
}
}
在代码中的其他一些点:
private HttpSession session() {
ServletRequestAttributes attr = (ServletRequestAttributes) RequestContextHolder.currentRequestAttributes();
return attr.getRequest().getSession(true); // true == allow create
}
session().setAttribute("CURRENT_USER", user);
int useridSession = ((User)session().getAttribute("CURRENT_USER")).getId();
当我测试来自 Postman 的流程时,它运行良好。明白了 设置cookie:JSESSIONID=9B10D7862C0D240C5E1A0BF082E6196B;路径=/fmbApi;HttpOnly 的
但是在 Chrome 中打开,当我在 react native expo 终端(http://localhost:19006/ 打开)上按 w 时,我没有看到 Set-Cookie 标头返回。
我的提取代码:
const integrate = async (method, url, headers, body) => {
const requestOptions = {
method: method,
credentials: 'include'
}
if(headers!=null) {
requestOptions.headers = headers
}
if(body!=null) {
requestOptions.body = body
}
console.log('Executing '+ method + ' ' + url)
let resp
try {
resp = await fetch(url, requestOptions)
} catch (error) {
console.log('There was an error', error);
}
const response = await resp.json();
console.log('response ',resp.headers.get("Set-Cookie"))
resp.headers.forEach(console.log);
return response;
}
我错过了什么?
更新:我添加了
server.servlet.session.cookie.http-only=false
server.servlet.session.cookie.path=/
所以 Postman 中的 cookie 看起来像这样:
JSESSIONID=496A19C9C073F0C95A44666A29BAD9CD; Path=/
还没有运气。
答: 暂无答案
评论