# 添加架包
在 pom 文件中添加一下坐标
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| <dependency> <groupId>org.springframework</groupId> <artifactId>spring-websocket</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-messaging</artifactId> <version>${spring.version}</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-core</artifactId> <version>2.9.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.9.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-annotations</artifactId> <version>2.9.5</version> </dependency> <dependency> <groupId>com.fasterxml.jackson.module</groupId> <artifactId>jackson-module-jaxb-annotations</artifactId> <version>2.9.5</version> </dependency>
|
编写 config 类
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| package com.yuyun.elevator.controller.websocket;
import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.EnableWebMvc; import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; import org.springframework.web.socket.WebSocketHandler; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; import org.springframework.web.socket.handler.TextWebSocketHandler; import org.springframework.web.socket.server.support.HttpSessionHandshakeInterceptor;
@Configuration @EnableWebMvc @EnableWebSocket public class WebSocketConfig extends WebMvcConfigurationSupport implements WebSocketConfigurer { @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) { webSocketHandlerRegistry.addHandler(webSocketHandler(), "/websocket").addInterceptors(new HttpSessionHandshakeInterceptor()).setAllowedOrigins("*"); webSocketHandlerRegistry.addHandler(webSocketHandler(), "/sockjs").addInterceptors(new HttpSessionHandshakeInterceptor()).withSockJS(); }
@Bean public TextWebSocketHandler webSocketHandler(){ SpringWebSocketHandler springWebSocketHandler = new SpringWebSocketHandler(); return springWebSocketHandler; } } 编写SpringWebSocketHandler
package com.yuyun.elevator.controller.websocket;
import org.springframework.web.socket.*; import org.springframework.web.socket.handler.TextWebSocketHandler;
public class SpringWebSocketHandler extends TextWebSocketHandler { @Override public void afterConnectionEstablished(WebSocketSession session) throws Exception { System.out.println("连接成功!"); super.afterConnectionEstablished(session); }
@Override public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception { session.sendMessage(message); super.handleMessage(session, message); }
@Override protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception { super.handleTextMessage(session, message); }
}
|
注意:spring 默认会给一个 OriginHandshakeInterceptor 的拦截器
解决办法
1 2
| (setAllowedOrigins(“*”)) webSocketHandlerRegistry.addHandler(webSocketHandler(), “/websocket”).addInterceptors(new HttpSessionHandshakeInterceptor()).setAllowedOrigins(“*”);
|