HandlerWebSocket.java 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. package com.example.course.websocket.netty;
  2. import com.example.course.utils.StringTools;
  3. import io.netty.channel.Channel;
  4. import io.netty.channel.ChannelHandlerContext;
  5. import io.netty.channel.SimpleChannelInboundHandler;
  6. import io.netty.handler.codec.http.websocketx.TextWebSocketFrame;
  7. import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler;
  8. import org.slf4j.Logger;
  9. import org.slf4j.LoggerFactory;
  10. import org.springframework.stereotype.Component;
  11. @Component
  12. public class HandlerWebSocket extends SimpleChannelInboundHandler<TextWebSocketFrame> {
  13. private static final Logger logger = LoggerFactory.getLogger(HandlerHeartBeat.class);
  14. /**
  15. * 通道就绪后 调用,一般用来做初始化
  16. * @param ctx
  17. * @throws Exception
  18. */
  19. @Override
  20. public void channelActive(ChannelHandlerContext ctx) throws Exception {
  21. logger.info("有新的连接加入....");
  22. }
  23. @Override
  24. public void channelInactive(ChannelHandlerContext ctx) throws Exception {
  25. logger.info("有连接断开....");
  26. }
  27. @Override
  28. protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception {
  29. Channel channel = ctx.channel();
  30. logger.info("收到消息:{}",msg.text());
  31. }
  32. @Override
  33. public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
  34. if (evt instanceof WebSocketServerProtocolHandler.HandshakeComplete){
  35. WebSocketServerProtocolHandler.HandshakeComplete complete = (WebSocketServerProtocolHandler.HandshakeComplete) evt;
  36. String url = complete.requestUri();
  37. String token = getToken(url);
  38. if (token == null){
  39. ctx.channel().close();
  40. return;
  41. }
  42. logger.info("url:{}",url);
  43. }
  44. super.userEventTriggered(ctx, evt);
  45. }
  46. private String getToken(String url){
  47. // 判断
  48. if (StringTools.isEmpty(url) || url.indexOf("?")==-1){
  49. return null;
  50. }
  51. String[] queryParams = url.split("\\?");
  52. if (queryParams.length!=2){
  53. return null;
  54. }
  55. String[] params = queryParams[1].split("=");
  56. if (params.length!=2){
  57. return null;
  58. }
  59. return params[1];
  60. }
  61. }