Skip to content

Commit fb9aef3

Browse files
committed
test WebSocketHandlerDecorator
1 parent 152451c commit fb9aef3

File tree

4 files changed

+59
-3
lines changed

4 files changed

+59
-3
lines changed

src/main/java/cn/netbuffer/springboot/websocket/demo/config/SpringWebSocketConfig.java

+3-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
import cn.netbuffer.springboot.websocket.demo.interceptor.RbacHandshakeInterceptor;
44
import cn.netbuffer.springboot.websocket.demo.websocket.handler.MessageHandler;
5+
import cn.netbuffer.springboot.websocket.demo.websocket.handler.PersistenceToDatabaseWebSocketHandlerDecorator;
6+
import cn.netbuffer.springboot.websocket.demo.websocket.handler.PersistenceToElasticsearchWebSocketHandlerDecorator;
57
import cn.netbuffer.springboot.websocket.demo.websocket.handler.TextHandler;
68
import lombok.extern.slf4j.Slf4j;
79
import org.springframework.context.annotation.Bean;
@@ -32,7 +34,7 @@ public WebSocketHandler buildTextHandler() {
3234

3335
@Bean
3436
public WebSocketHandler buildMessageHandler() {
35-
return new MessageHandler();
37+
return new PersistenceToElasticsearchWebSocketHandlerDecorator(new PersistenceToDatabaseWebSocketHandlerDecorator(new MessageHandler()));
3638
}
3739

3840
}

src/main/java/cn/netbuffer/springboot/websocket/demo/interceptor/RbacHandshakeInterceptor.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ public boolean beforeHandshake(ServerHttpRequest serverHttpRequest, ServerHttpRe
2222
log.debug("beforeHandshake {} to {} websocket request", serverHttpRequest.getMethodValue(), serverHttpRequest.getURI());
2323
log.debug("serverHttpRequest.getHeaders()={}", serverHttpRequest.getHeaders());
2424
// boolean result = handleByCookie(serverHttpRequest);
25-
// boolean result = handleByQueryString(serverHttpRequest);
26-
boolean result = handleByHttpSession(serverHttpRequest);
25+
boolean result = handleByQueryString(serverHttpRequest);
26+
// boolean result = handleByHttpSession(serverHttpRequest);
2727
if (!result) {
2828
serverHttpResponse.setStatusCode(HttpStatus.FORBIDDEN);
2929
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cn.netbuffer.springboot.websocket.demo.websocket.handler;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.web.socket.*;
5+
import org.springframework.web.socket.handler.WebSocketHandlerDecorator;
6+
7+
@Slf4j
8+
public class PersistenceToDatabaseWebSocketHandlerDecorator extends WebSocketHandlerDecorator {
9+
10+
public PersistenceToDatabaseWebSocketHandlerDecorator(WebSocketHandler delegate) {
11+
super(delegate);
12+
}
13+
14+
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) {
15+
try {
16+
this.getDelegate().handleMessage(session, message);
17+
} catch (Exception e) {
18+
e.printStackTrace();
19+
}
20+
if (message instanceof TextMessage) {
21+
log.debug("save text message[{}] to database", message.getPayload());
22+
//todo 这里可以基于任意的jdbc框架来写库
23+
} else if (message instanceof BinaryMessage) {
24+
log.debug("save binary message to database");
25+
}
26+
}
27+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
package cn.netbuffer.springboot.websocket.demo.websocket.handler;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.web.socket.*;
5+
import org.springframework.web.socket.handler.WebSocketHandlerDecorator;
6+
7+
@Slf4j
8+
public class PersistenceToElasticsearchWebSocketHandlerDecorator extends WebSocketHandlerDecorator {
9+
10+
public PersistenceToElasticsearchWebSocketHandlerDecorator(WebSocketHandler delegate) {
11+
super(delegate);
12+
}
13+
14+
public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) {
15+
try {
16+
this.getDelegate().handleMessage(session, message);
17+
} catch (Exception e) {
18+
e.printStackTrace();
19+
}
20+
if (message instanceof TextMessage) {
21+
log.debug("save text message[{}] to elasticsearch", message.getPayload());
22+
//todo 这里可以基于任意的elasticsearch框架来写入搜索引擎
23+
} else if (message instanceof BinaryMessage) {
24+
log.debug("save binary message to elasticsearch");
25+
}
26+
}
27+
}

0 commit comments

Comments
 (0)