React native fetch web 平台 Spring boot Set-Cookie 未设置

React native fetch web platform Spring boot Set-Cookie not set

提问人:Asif 提问时间:11/16/2023 最后编辑:Asif 更新时间:11/16/2023 访问量:16

问:

我阅读了很多关于这个问题的 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=/

还没有运气。

spring-boot react-native expo 获取 setcookie

评论


答: 暂无答案