package com.example.course.websocket.netty; import com.example.course.utils.StringTools; import io.netty.channel.Channel; import io.netty.channel.ChannelHandlerContext; import io.netty.channel.SimpleChannelInboundHandler; import io.netty.handler.codec.http.websocketx.TextWebSocketFrame; import io.netty.handler.codec.http.websocketx.WebSocketServerProtocolHandler; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.stereotype.Component; @Component public class HandlerWebSocket extends SimpleChannelInboundHandler { private static final Logger logger = LoggerFactory.getLogger(HandlerHeartBeat.class); /** * 通道就绪后 调用,一般用来做初始化 * @param ctx * @throws Exception */ @Override public void channelActive(ChannelHandlerContext ctx) throws Exception { logger.info("有新的连接加入...."); } @Override public void channelInactive(ChannelHandlerContext ctx) throws Exception { logger.info("有连接断开...."); } @Override protected void channelRead0(ChannelHandlerContext ctx, TextWebSocketFrame msg) throws Exception { Channel channel = ctx.channel(); logger.info("收到消息:{}",msg.text()); } @Override public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { if (evt instanceof WebSocketServerProtocolHandler.HandshakeComplete){ WebSocketServerProtocolHandler.HandshakeComplete complete = (WebSocketServerProtocolHandler.HandshakeComplete) evt; String url = complete.requestUri(); String token = getToken(url); if (token == null){ ctx.channel().close(); return; } logger.info("url:{}",url); } super.userEventTriggered(ctx, evt); } private String getToken(String url){ // 判断 if (StringTools.isEmpty(url) || url.indexOf("?")==-1){ return null; } String[] queryParams = url.split("\\?"); if (queryParams.length!=2){ return null; } String[] params = queryParams[1].split("="); if (params.length!=2){ return null; } return params[1]; } }