Spring @RestController 不设置带有响应的 cookie

2024-05-22

我有以下休息端点,我想将 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:我应该补充一点,它添加了xhrFieldsJQuery 的片段$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(使用前将#替换为@)

Spring @RestController 不设置带有响应的 cookie 的相关文章

随机推荐

  • 如何记录所有抛出的异常?

    如何记录抛出和捕获的任何异常 就像 Visual Studio 的 IntelliTrace 所做的那样 或者有没有办法将 InteliTrace 集成到应用程序的调试版本中 然后查看其日志 Update 我会稍微澄清一下 我想要标准 tx
  • 如何设置Codeigniter上传库在本地机器的上传路径?

    我将以下路径设置为 Codeigniter 附带的上传库的 upload path this gt upload config upload path uploads working 该路径在远程服务器上运行良好 但是 当我在本地调试时 它
  • Maven 插件前缀解析如何工作?为什么它解决了“findbugs”而不是“jetty”?

    我正在使用 Maven 进行一些测试 并意识到我可以执行findbugsFindbugs 插件的目标 无需将插件添加到 POM 文件 另一方面 当我需要运行runJetty 插件的目标 我被迫将插件添加到 POM 文件中 否则构建失败 为什
  • 用于全文搜索和 2 亿多条记录的数据库

    我即将创建一个包含至少 2 亿个条目的庞大数据库 数据库需要可使用全文进行搜索 并且速度应该很快 我的数据库从许多不同的数据源获取数据 我需要定期导入新的或更新的数据 将我的所有数据存储在像 mysql 这样的关系数据库中 然后创建一个 n
  • Mercurial 与 Visual Studio 2010 的白痴清单

    所以我是一个源代码控制白痴 所以请用这个清单来幽默我 我最终决定使用Mercurial TortoiseHg VS2010 HgScc包 http bitbucket org zzsergant hgsccpackage wiki Home
  • (发件人:TObject)

    发件人 TObject 是什么意思 如 procedure TForm1 Button1Click Sender TObject var s Integer begin end Sender 是对触发事件的组件的引用 在这种情况下 Send
  • Android 缩放和密度问题

    Update 一些研究表明 华硕 Transformer TF700T 高端 的像素密度应约为 224 因此 android 报告的 159 值要么是错误的 要么已被某种方式修改 system 中的 lcd 密度键 build prop 由
  • Spring Security 的 AJAX 请求给出 403 Forbidden

    我有一个基于spring boot spring security thymeleaf的网站 在某些情况下我也使用ajax 问题 我在 Spring Security 中使用表单登录安全性 在浏览器中 登录后我可以使用rest API GE
  • 如何更改ios中FBSDKLoginButton中的默认登录按钮?

    如何自定义 Facebook 中的登录按钮 我不想使用 Facebook 默认登录按钮 对于 SDK 4 0 您应该添加一个按钮 并在按钮操作中使用以下代码 IBAction loginButtonClicked id sender FBS
  • 如何将 java ArrayList 转换为等效的 double[] [重复]

    这个问题在这里已经有答案了 可能的重复 如何在 Java 中从 List 转换为 double https stackoverflow com questions 6018267 how to cast from listdouble to
  • 在多个 angular.js 应用程序之间共享单个服务

    我正在构建一个电子商务网站 基于 shopify 并且使用多个小型 angularjs 应用程序来处理诸如快速购物车 愿望清单 过滤产品和其他一些较小项目之类的事情 我最初使用了一个大型应用程序 具有路由和所有内容 但当我没有完整的 RES
  • 缓存消息discord.js

    我想做一些反应角色 但为此 我必须缓存机器人启动之前发送的消息 我尝试过channel messages fetch 但到目前为止还没有奏效 我当前的代码 client on messageReactionAdd async reactio
  • 如何在 Metro 应用程序中从 Web 上下文(Iframe)发出 javascript 警报。

    在我的 Metro 应用程序中 我使用 iframe 加载 Web 应用程序 基本上是一个包含一些控件的表单 最后用户单击 完成 按钮 我想显示警报 我在地铁应用程序中知道 我们可以使用 new Windows UI Popup Messa
  • 如何停止或更改 Spring Integration Poller 的延迟

    我正在使用 Spring Integration 使用以下配置从目录中读取文件 但是 一旦找到任何文件 我希望停止轮询器 直到服务不再重新启动 有什么方法可以在运行时更改轮询器延迟或在运行时启动 停止轮询器 Bean public Mess
  • SQL Server 触发器从多个表中删除一条记录

    我知道这可以使用外键来完成 但我无法添加它们 或者当我插入新记录时会发生奇怪的事情 这个数据库中有很多存储过程 但我不知道它们是做什么的 因为我对存储过程一无所知 我希望有人可以帮助我找到一个触发器 当我从 Product 表中删除特定的
  • HTTPURLConnection 不遵循从 HTTP 到 HTTPS 的重定向

    我不明白为什么JavaHttpURLConnection不遵循从 HTTP 到 HTTPS URL 的 HTTP 重定向 我使用以下代码来获取页面https httpstat us https httpstat us import java
  • 通过 Amazon SQS 将压缩文本从 PHP 发送到 NodeJS

    我似乎一直坚持通过 Amazon SQS 将压缩消息从 PHP 发送到 NodeJS 在 PHP 方面我有 SQS gt sendMessage Array QueueUrl gt queueUrl MessageBody gt artic
  • jQuery Signature Pad:使用类型化版本获取 JSON 输出

    我一直在使用 Thomas J Bradley 的 jQuery Signature Pad 插件来捕获绘制的签名 并且效果很好 我想做的是还允许输入签名如演示所示 http thomasjbradley ca lab signature
  • json文件格式的升级路径

    我们将 Java 应用程序的用户首选项存储在 JSON 文件中 使用Jackson http jackson codehaus org 随着我们继续开发该应用程序 我们将添加首选项 重命名首选项并删除过时的首选项 当用户将应用程序升级到下一
  • Spring @RestController 不设置带有响应的 cookie

    我有以下休息端点 我想将 cookie 与我的ResponseEntity 然而 在成功发送响应后 却找不到 cookie RequestMapping value myPath method RequestMethod POST publ