Noa*_*oam 6 java spring jersey websocket sockjs
我们试图用Spring Framework WebSocket支持公开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);
}
}
Run Code Online (Sandbox Code Playgroud)
问题是我们无法访问/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");
Run Code Online (Sandbox Code Playgroud)
(代码来自spring websockets教程)
root/api/server即使不是/sockjs也/root/api/server/sockjs不可访问,同一个包中的其他资源也会被配置.
我知道这是一个很古老的问题,但最近我遇到了同样的问题,我花了半天时间才找到解决方案。当我找到一个我想分享它的时候,至少是为了未来的我自己。
问题是我的WEB-INF.xml. 解决方案是将 SpringDispatcherServlet及其映射添加到/*路由中。
所以基本上看起来像
<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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
208 次 |
| 最近记录: |