1. 配置文件:
<!-- 配置好处理器 -->
<bean id="websocketHandler" class="com.jeecms.cms.TestWebSocketHandler"/>
<!-- 配置拦截器 -->
<websocket:handlers>
<websocket:mapping path="/testWebSocket.jspx" handler="websocketHandler"/><!-- 连接的URL -->
<websocket:handshake-interceptors>
<bean class="com.jeecms.cms.TestHandshakeInterceptor"/>
</websocket:handshake-interceptors>
</websocket:handlers>
<bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>
2. 拦截器
public class TestHandshakeInterceptor extends HttpSessionHandshakeInterceptor {
@Override
public boolean beforeHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
System.out.println("beforeHandshake");
return super.beforeHandshake(request, response, wsHandler, attributes);
}
@Override
public void afterHandshake(ServerHttpRequest request,
ServerHttpResponse response, WebSocketHandler wsHandler,
Exception ex) {
System.out.println("After Handshake");
super.afterHandshake(request, response, wsHandler, ex);
}
}
3. 配置
@Configuration
@EnableWebSocket
@EnableWebMvc
public class TestWebSocketConfig implements WebSocketConfigurer {
public void registerWebSocketHandlers(WebSocketHandlerRegistry webSocketHandlerRegistry) {
webSocketHandlerRegistry.addHandler(myHandler(),"/testWebSocket.jspx").addInterceptors(new TestHandshakeInterceptor());
webSocketHandlerRegistry.addHandler(myHandler(),"/sockjs/testWebSocket/info").addInterceptors(new TestHandshakeInterceptor()).withSockJS();
}
@Bean
public WebSocketHandler myHandler(){
return new TestWebSocketHandler();
}
}
4. Handler
public class TestWebSocketHandler extends TextWebSocketHandler {
@Override
public void afterConnectionEstablished(WebSocketSession session) throws Exception {
System.out.println("成功链接 websocket......");
super.afterConnectionEstablished(session);
}
@Override
public void afterConnectionClosed(WebSocketSession session, CloseStatus status) {
System.out.println("afterConnectionClosed");
}
//这里是处理前端发送的消息以及返回给前端的数据
//可以从session里面获取attributes,
@Override
protected void handleTextMessage(WebSocketSession session,
TextMessage message) throws Exception {
super.handleTextMessage(session, message);
System.out.println("handleTextMessage");
}
5. 前端访问:
openWebSocket(){
var ws = null;
//判断当前浏览器是否支持WebSocket
if ('WebSocket' in window) {
ws = new WebSocket("ws://localhost:8080/jeecmsv9f/visualizationWebSocket.jspx?type=mall");
console.log("WebSocket");
} else {
ws = new SockJS("ws://localhost:8080/jeecmsv9f/sockjs/visualizationWebSocket/info?type=mall");
console.log("SockJS");
}
ws.onopen = function () {
console.log("open");
};
//这个事件是接受后端传过来的数据
ws.onmessage = function (event) {
//根据业务逻辑解析数据
console.log("onmessage");
};
ws.onclose = function (event) {
console.log("onclose");
};
},
遇到的问题:ws访问报错:403.
能进入到拦截器,后台打印:
beforeHandshake
After Handshake
能问一下,jeecms后台管理页面,要添加整合一个websocket的具体步骤吗?谢谢。
|
|