问题标签 [spring-messaging]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
10089 浏览

java - Spring中@Service注解的功能

这是一种“什么是@Service注解”?问题,但用另一种方法。因为,我不确定这里发生了什么:

我有一个控制器类:

我尝试从内部someBean.handleMsg向目的地发送响应。像这样的一些事情:

两个版本的配置

  1. SomeBean 在.xml中配置:

喜欢:

  1. SomeBean 被注释为服务(在第一个它没有):

喜欢:

  • 请注意,在这两种情况下,注入等没有任何问题。在这两种情况下,客户端都成功订阅、发送消息和处理消息。

唯一区别是:

  • SomeBean有注解时@Service,成功响应客户端,没有注解时,客户端收不到响应消息,虽然没有任何异常。

这是问题:

  • 在这种情况下,@Service 实际上是什么?有人可以解释一下这里发生了什么吗?
0 投票
1 回答
1270 浏览

java - Spring消息传递+安全性如何通过websockets登录?

我正在开发一个带有 spring-messaging 和 STOMP over sockJs 的服务器。我想通过 websockets 进行授权。所以从客户端我确实发送了一些令牌,然后我通过令牌获取针用户,我想将我的会话与这个用户相关联,我接下来做了:

但是会话没有关联,有人可以帮我解决这个问题吗?

谢谢。

0 投票
0 回答
337 浏览

spring - 无法从其他服务向 websocket 发送消息

我按照这里的教程在我的 web 应用程序中设置 websockets,下面是结果代码。现在我想如果我在我的应用程序中从另一个类 ( ) 写入主题LocationManagerImpl.java,我将能够将消息发送给订阅该主题的所有客户端。但是,客户似乎没有收到消息。如果我调试并检查日志,我会得到指示我的消息已写入主题,但客户端没有读取它。我无法弄清楚我在这里做错了什么。请帮忙。

HelloController.java

WebSocketConfiguration.java

你好.js

示例.jsp

LocationManagerImpl.java

0 投票
2 回答
1650 浏览

spring - 使用@MessageMapping 注解时如何以编程方式启动/停止消息消费?

我正在使用@MessageMapping(queue_name)注释和 spring-aws-cloud 库来使用来自两个 SQS 队列的消息。

我看到它SimpleMessageListenerContainer被用作两个消息队列的侦听器容器。容器上有一个start()和一个stop()方法,但我相信这将启动/停止两个队列的消费。

我想知道是否有办法以编程方式分别启动/停止队列的队列消耗。怎样才能做到这一点?

0 投票
2 回答
1433 浏览

spring - 如何将我的自定义 MessageConverter 注册到 SimpleMessageListenerContainerFactory?

我有实现 MessageConverter 接口的客户转换器。但是,我看不到使用 SimpleMessageListenerContainerFactory 注册它的方法。结果,当我尝试从 SQS 读取源格式的消息时出现错误,因为它不知道如何将其转换为目标对象。

我查看了 SqsConfiguration 类,发现正在定义的 simpleMessageListenerContainer bean 上设置了 queueMessageHandler。QueueMessageHandler 上有解析器,其中之一是 CompositeMessageConverter,它采用 MessageConverter 类型的集合。我猜想我需要将我的自定义 MessageConverter 添加到这个集合中。我似乎无法掌握如何做到这一点。

有人可以帮我指出一种方法我可以注册我的客户 MessageMapper 吗?

0 投票
4 回答
3592 浏览

apache - 带有 Tomcat 7.0.54 和 Apache 2.4 的 Spring Websockets 4.1.6

我在运行一个使用 Spring WebSockets 4.1.6、Tomcat 7.0.54 和 Apache 2.4.16 作为 Web 服务器的简单应用程序时遇到了一些麻烦。

我在互联网上阅读了很多帖子,但我不知道发生了什么。服务器启动没有问题。我在我的服务器项目中发布了一个 index.html,它启动了一个 WebSocket 连接。

如果我直接从 Tomcat 访问这个文件,它就可以完美运行。

但是如果我从 Apache 服务器访问这个文件,它就不起作用。

在我的 Apache 服务器中,我配置了一个代理通道:

我的服务器 WebSocket 配置如下所示:

我的客户按如下方式进行连接:

服务器抛出一个错误,说我需要启用异步支持,但我不知道该怎么做。

我试图在我的 web.xml 文件中添加该属性,但它不起作用:

任何想法?

提前致谢。

马克

0 投票
1 回答
4017 浏览

spring - 使用 WebSockets 的 Spring Security - 禁止 403

我已经在 Spring 中实现了 WebSocket。一切正常,但最近我决定实施 Spring Security。

我的 MessageBroker 看起来像:

我的 JS 客户端看起来像这样:

弹簧安全配置:

通过我的 JS 客户端订阅后,我收到:

所以我决定在 Security Config 中添加这段代码:

但之后我收到这种错误:

我不知道如何定义这样的 bean,所以我在下面的类中创建了这个:

但在编译期间我收到这种错误:

我真的不知道如何解决这个问题:(我必须补充一点,我使用的是 Spring Core 4.0.1.RELEASE 和 Spring Messaging 4.0.1.RELEASE。所有与 Spring Security 相关的库都在 4.0.1.RELEASE 版本中.

0 投票
0 回答
8272 浏览

spring - Spring 安全 websocket 和 HTTP 身份验证/授权

总结 我想通过 STOMP 实现 websocket 通信。Authenticate 第一次(HTTP 请求)websocket 握手时的用户,并在以后使用此 Principal 授权 websocket 消息。

问题 系统在客户端第一次尝试连接到 websocket 端点时(HTTP 握手时间)对客户端进行身份验证。我的 spring 安全过滤器和身份验证提供程序完成了它的工作并正确地验证了客户端。在此之后,我可以检查客户端是否获得了角色,并且我的身份验证对象也存储在 SecurityContext 中。(此时已建立 websocket 连接并且 HTTP 协议已被丢弃。)但是从第一次 websocket 通信中,我得到 Authentication 对象是匿名的,因为 SecurityContextHolder 以某种方式被清除,因为SecurityContextChannelInterceptor清除了它。

Spring文档声称以下内容: http: //docs.spring.io/autorepo/docs/spring-security/current/reference/htmlsingle/#websocket-authentication

WebSocket 重用在建立 WebSocket 连接时在 HTTP 请求中找到的相同身份验证信息。这意味着 HttpServletRequest 上的 Principal 将被移交给 WebSockets。如果您使用 Spring Security,则 HttpServletRequest 上的 Principal 会自动被覆盖。

我非常简单的过滤器

我非常简单的身份验证提供程序

Spring boot 与 1.3.0.BUILD-SNAPSHOT 版本一起使用。一个额外的依赖项是 spring-security-messaging 和 4.0.1.RELEASE 版本,我在默认的 spring boot 依赖项旁边使用它。

任何问题的帮助表示赞赏。

应用安全:

认证安全:

Websocket 安全性:

0 投票
1 回答
1634 浏览

spring - Spring SimpMessagingTemplate

我有一个从 RabbitMQ 接收一些数据的应用程序。一切正常,我的意思是在我有注释@EnableScheduling 的课堂上。

但是,当我想处理队列侦听器从 RabbitMQ 收到的消息(这也可以)并使用 SimpMessagingTemplate 将它们传递到 Stomp WebSocket 的特定上下文时,我无法做到这一点。SimpMessagingTemplate 定义在 dispatcher-servlet.xml 中,但与 RabbitMQ 相关的配置在根上下文中。我试图将所有内容移到一个上下文中,但它不起作用。有没有人跟我有类似的情况?

0 投票
2 回答
2565 浏览

spring - 如何在 Spring ApplicationListener (SessionConnectedEvent) 中发送消息

我正在使用 Stomp over SockJS 和 Spring 消息传递。当连接新用户时,我正在尝试向所有登录用户发送消息。所以首先这是我的听众:

我的 WebSocket 配置

我的 JS 配置

我的问题是我的template.convertAndSend()在ApplicationListener中不起作用。但是,如果我将它放在使用 @MessageMapping 注释的 Controller 方法中,它将起作用,并且我将拥有一个控制台日志客户端。

所以我的问题是:template.convertAndSend()可以在ApplicationListener中工作吗?如果是这样,怎么做?还是我错过了什么?

谢谢您的帮助!

PS:我的log.info(event.toString()); 在 ApplicationListener 中工作,所以我知道我正在进入 onApplicationEvent() 方法。