Spring WebSocket 使用 SockJS 连接到不同的域

2024-03-11

Spring 中的 WebSockets 是一个相当新的主题,我厌倦了寻找更多内容。

我的问题是连接到来自不同域的服务,我正在与 Lineman 一起构建前端,并与 Spring Boot 一起构建后端,我在两个不同的端口上有这些应用程序:8000 和本地主机上的 8080。

我遇到了“Access-Control-Allow-Origin”标头的问题,但我已经通过在服务器端添加一个过滤器来解决它,该过滤器将允许的来源添加到标头中。之后我开始在连接时出现以下错误:

GET http://localhost:8080/socket/info 403 (Forbidden)
AbstractXHRObject._start @ sockjs-0.3.4.js:807
(anonymous function) @sockjs-0.3.4.js:841

我的项目中没有 Spring Security,所以这不是授权问题,错误指向 sockJS : that.xhr.send(有效负载); - 从未定义有效负载。我尝试过,但找不到可能开始的调用的根源。

我在想在设置连接时是否需要向 SockJS 和 Stomp 添加一些附加信息,但该工具的两个 wiki 页面中都没有太多示例和注释。

下面你将找到连接 JS 代码。

var socket = new SockJS("http://localhost:8080/socket");
client = Stomp.over(socket);

client.connect({'login': BoatsGame.userName,
                    'passcode': 'guest'},
            function (frame) {
....

The Server Side has a MessageBroker configured :    


@Configuration
@EnableWebSocketMessageBroker
public class MessageBrokerConfig extends AbstractWebSocketMessageBrokerConfigurer {

@Bean
public ServletServerContainerFactoryBean createWebSocketContainer() {
     ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();
     container.setMaxTextMessageBufferSize(8192);
     container.setMaxBinaryMessageBufferSize(8192);
     return container;
}

@Override
public void configureMessageBroker(MessageBrokerRegistry config) {
     //config.enableStompBrokerRelay("/queue", "/topic");
     config.enableSimpleBroker("/queue", "/topic","/user");
     config.setApplicationDestinationPrefixes("/BoatBattleGame");
}

@Override
public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
    stompEndpointRegistry.addEndpoint("/socket").withSockJS();
}
}

我还尝试设置 MessageHandler,因为它可以在配置时设置 OriginAllowe 选项,但我不确定它如何连接到代理。

最后想一想,此设置在一个端口上运行时可以正常工作。


贾克斯的回答是正确的:)

registerStompEndpoints 方法使我们有机会设置允许的来源。 我们需要将其添加在“withSockJs()”选项之前。

    @Override
    public void registerStompEndpoints(StompEndpointRegistry stompEndpointRegistry) {
        stompEndpointRegistry.addEndpoint("/BO/socket").setAllowedOrigins("*").withSockJS();
    }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spring WebSocket 使用 SockJS 连接到不同的域 的相关文章

随机推荐

  • 等待第 3 方 JS 库在 Angular 2 服务中完成初始化的最佳方法是什么?

    我正在 Angular 服务中包装第 3 方 JS 库 我如何保证第三方 JS 库已加载 初始化 等 在使用我的服务之前 你能看一下下面的代码并告诉我这是否是一个良好的编码习惯 我正在服务的构造函数中设置一个承诺 最终将实现的承诺 并且我的
  • 当多个 Rust 源文件共享相同名称时,我可以设置 LLDB 断点吗?

    背景 在 Rust 中 您通常有多个名为mod rs 例如 app name src main rs foo mod rs bar mod rs Problem 我找不到区分的方法mod rs设置 LLDB 断点时来自另一个 cargo b
  • 终端未在 Android Studio 中注册输入

    当我在 android studio 中打开终端并键入时 没有任何记录并且光标保持不变 屏幕截图在闪烁之间捕获了光标 但它仍然位于应用程序之后的 gt 旁边 4 个月前 其他人也遇到了同样的问题 Android Studio 终端问题 ht
  • 无法使用 ActionBarSherlock 更改选项卡的背景

    我想更改选项卡的背景 在过去的两天里我尝试了一切 所以我决定在这里发布我的代码 ActionBar 的背景设置正确 但 TABS 保持黑色
  • 将范围变量传递给 ng-click 中的函数

    所以我知道我一定错过了这个问题的 javascript 的一些基本部分 但无论如何它都是这样的 我有一个控制器 其中声明了一个变量 scope IsStartDatePickerHidden true scope IsEndDatePick
  • 摩卡作为图书馆

    我想使用 mocha node js 测试框架 而不是 ruby 模拟库 作为库 而不是使用 mocha 可执行文件来运行我的测试 是否可以通过这种方式运行摩卡测试 这些示例都只是调用 mocha 库 假设它们已经是 require 并且
  • 使用引导网格系统嵌套行?

    我想要 1 个较大的图像和 4 个 2x2 格式的较小图像 如下所示 我最初的想法是将所有东西都放在一排 然后创建两列 并在第二列中创建两行和两列以创建 1x1 和 2x2 效果 但是 这似乎不可能 或者我只是做得不正确 引导版本 3 x
  • 如何编写 Webpack 插件,根据其他模块动态地将模块添加到捆绑包中?

    我在为翻译服务编写 Webpack 插件时遇到问题 目标是 获取编译期间所有必需模块的名称 和源代码 我需要能够扫描包含的源代码以获取特殊的t 函数用法 但我只想扫描那些将包含在捆绑包中的模块 根据构建配置 这些模块可以是所有项目模块的子集
  • 成功插入数据后如何清除单选按钮列表?

    任何人都可以帮我解决这个简单的问题 如何在提交表单后清除单选按钮列表的选择 我需要在我的 ASP NET Web 应用程序中使用它 当用户单击清除按钮时 我需要清除单选按钮列表的选择 提前致谢 你可以 设置 myrbList Selecte
  • 删除带有嵌入空格的路径中的所有 .SVN 文件夹

    In 这个问题 https stackoverflow com questions 5935776 how to delete svn folders in my source tree 13850323 13850323以及其他一百个地方
  • Python - Pandas:给定行中最小值的数字/索引

    我有一个 pandas 数据框 具有一行和多列 我想获取给定行中最小值的列号 索引 我找到的代码是 df columns get loc colname 上面的代码要求提供列名称 我的数据框没有列名 我想获取最小值的列位置 Use argm
  • Android Studio:设计视图中“创建景观变化”的按钮在哪里?

    我在哪里可以找到按钮创造景观变化 https stackoverflow com questions 28815769 android studio creating landscape layouts answer 29467041 在我
  • 如何在 SQLiteDatabase 查询中测试光标是否为空

    我有一个由以下代码创建的 SQL 表 public void onCreate SQLiteDatabase db db execSQL CREATE TABLE TABLE NAME ID INTEGER PRIMARY KEY AUTO
  • 布尔值 FALSE 和 TRUE 可以重新定义吗

    我正在读一本关于 PHP 以及如何使用 PHP 的书TRUE and FALSE 它说 事实上 小写版本更稳定 因为 PHP 不 允许您重新定义它们 大写的可以重新定义 我尝试重新定义TRUE and FALSE 但没有成功 我谷歌重新定义
  • 存储大量数据:数据库还是文件系统?

    假设我的应用程序创建 存储和检索大量条目 数千万 每个条目具有可变数量的不同数据 例如 某些条目仅具有几个字节 例如ID 标题 而某些条目可能具有兆字节的补充数据 每个条目的基本结构相同 并且采用 XML 格式 条目是任意创建和编辑的 很可
  • 从 CouchDB 解析 JSON 时如何超越“total_rows”

    我使用以下 jQuery 代码从 CouchDB 获取 JSON 文件 Function getURL var api url http 127 0 0 1 5984 couchcontentqueue design DocCollecti
  • 子类化后的委托?

    抱歉 我无法为标题提出一个简短的问题 如果我使用委托协议和属性对一个类进行子类化 我的委托是否仍然需要实现超类的委托协议 或者我是否必须为子类定义一个新的委托协议 就我而言 我细分了UIImagePickerController UIIma
  • Google 语音 API - php 不返回任何内容

    我的代码受到用于语音转文本的全双工谷歌语音 API 的 php 版本的启发 http mikepultz com 2013 07 google speech api full duplex php version http mikepult
  • Swift 中的构建器模式设置方法

    我刚刚从 Android 基础转移到 ios 在 swift 中寻找构建器模式 get 和 set 方法 但找不到类似的东西 仅发现以下内容 var ptype String get return self ptype set ptype
  • Spring WebSocket 使用 SockJS 连接到不同的域

    Spring 中的 WebSockets 是一个相当新的主题 我厌倦了寻找更多内容 我的问题是连接到来自不同域的服务 我正在与 Lineman 一起构建前端 并与 Spring Boot 一起构建后端 我在两个不同的端口上有这些应用程序 8