java - Jersey 隐藏了 Spring 框架和 SockJS

标签 java spring websocket jersey sockjs

我们正在尝试使用 Spring Framework WebSocket support 公开 sockjs 端点.

这是 Jersey 管理路由的服务器端的配置:

@Configuration
@EnableWebSocket
public class WebSocketConfig extends WebSocketMessageBrokerConfigurationSupport {

    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/sockjs").withSockJS()
                .setStreamBytesLimit(512 * 1024)
                .setHttpMessageCacheSize(1000)
                .setDisconnectDelay(30 * 1000);
    }
}

问题是我们无法访问/sockjs ,客户端代码为:
List<Transport> transports = new ArrayList<>(2);
transports.add(new WebSocketTransport(new StandardWebSocketClient()));
transports.add(new RestTemplateXhrTransport());

SockJsClient sockJsClient = new SockJsClient(transports);
sockJsClient.doHandshake(new MyHandler(), "ws://localhost:8080/sockjs");

(代码来自 spring websockets tutorial)

同一包中的其他资源将在 root/api/server 下配置,即使,不是 /sockjs也不是 /root/api/server/sockjs可以访问。

最佳答案

我知道这是一个很古老的问题,但最近我遇到了同样的问题,我花了半天时间才找到解决方案。因为我找到了一个,所以我想分享它,至少是为了我自己的 future 。
问题是我的 WEB-INF.xml 中只有 Jersey 的 servlet 定义。 .解决方案是添加Spring的DispatcherServlet及其到 /* 的映射路线。
所以基本上它看起来像

<servlet>
  <servlet-name>spring</servlet-mapping>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <init-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-servlet.xml</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
  <async-supported>true</async-supported>
</servlet>
<servlet-mapping>
  <servlet-name>spring</servlet-name>
  <url-pattern>/*</url-pattern>
</servlet-mapping>

关于java - Jersey 隐藏了 Spring 框架和 SockJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43965014/

相关文章:

java - 将 jar 文件安装到 Maven 构建中的特定位置

java - Apache 可以基于 Tomcat webapp 的 Spring SecurityContext 限制访问吗?

java - Java 数组中的 add 和 element 的时间复杂度是多少?

java - 使用 JPA 处理 Spring、Hibernate 中的脏读

java - Spring 在启动时忽略失败

websocket - Ratchet Websockets - 灌输问题

javascript - AuthorizedHandler 阻止了错误的请求!网址 :/socket. io/

node.js - 使用 Socket.IO,如何找出断开连接的用户的 session ID?

java - Micronaut HTTP 客户端 - 反序列化通用类型 - 用于 API 测试

java - Spring OAuth2 token 请求中的 StackOverflowError