Netty的webSocket服务端的安全性的一些限制

简介: Netty的webSocket服务端的安全性的一些限制

服务端要求,欢迎给我留言和讨论



服务端会暴露在公网中,因此链接的安全性需要考虑。
防止数据篡改,和垃圾数据
复制代码


这里以笔者写的简单web聊天系统为基础


走wss路线



mkcert测试证书生成


mkcert -p12-file keystore.p12 -pkcs12 192.168.0.103 127.0.0.1 localhost
默认配置`alias=1`, `password=changeit`
复制代码


wss配置


//这里面的配置接受内容的长度过长,是因为当时做了写音视频编码为base64的转发
@Override
    public void initChannel(SocketChannel ch) throws Exception {
    ChannelPipeline pipeline = ch.pipeline();
    pipeline.addLast(new IdleStateHandler(10, 0, 0, TimeUnit.SECONDS));
    pipeline.addLast(new HttpServerCodec());
    pipeline.addLast(new HttpObjectAggregator(1024 * 1024));
    pipeline.addLast(new ChunkedWriteHandler());
    pipeline.addLast(new WebSocketServerProtocolHandler("/ws", null, true, 1024 * 512));
    pipeline.addLast(new TextWebSocketFrameHandler());
    // 配置ssl访问的
    SSLContext sslContext = SslUtil.createSSLContext("PKCS12",
    this.getClass().getClassLoader().getResourceAsStream("keystore.p12"), "changeit"); // 
                SSLEngine engine =sslContext.createSSLEngine();
    SSLEngine sslEngine = sslContext.createSSLEngine();
    sslEngine.setNeedClientAuth(false);
    sslEngine.setUseClientMode(false);
    pipeline.addFirst(new SslHandler(sslEngine));
    }
复制代码


新用户绑定验证


绑定的时候需要验证一下
这里用redis做了个缓存并加个过期时间:用户编码:token
这里登陆的是从其他服务登陆的,登录后会给创建个token缓存在redis用来共享
复制代码


老用户验证


服务端保存的有长连接通道:用户名:链接通道
private static Map<ChartUser, Channel> userChannel = new ConcurrentHashMap <ChartUser, Channel>();
可以查看服务端链接的通道是否属于这个用户的,不然拒绝
复制代码


断线重连


链接断开服务端会有个监听事件,移除链接
@Override
  public void channelInactive(ChannelHandlerContext ctx) throws Exception { 
    Channel incoming = ctx.channel();
    logger.info("Client:" + incoming.remoteAddress() + "掉线");
    ChannelManager.removeChannelByChannel(incoming);
  }
前端这里以websocketd为例会触发ws.onclose方法
比如当前链接的服务端挂掉了,或者网络原因这里会触发这个方法
在这个方法里面我们依旧是从业务端1.获取tokenn
                              2.获取server的地址(ip+端口) 这里需要服务端做集群保证服务不断
                              3.重新绑定websocket服务端完成重连
                              4.失败可以添加重试次数


相关文章
|
3月前
|
网络协议 JavaScript 前端开发
netty 实现 websocket
netty 实现 websocket
98 1
|
3月前
|
Java Maven
【Netty 网络通信】启动通信服务端
【1月更文挑战第9天】【Netty 网络通信】启动通信服务端
|
11月前
|
存储 网络协议 前端开发
Netty服务端和客户端开发实例—官方原版
Netty服务端和客户端开发实例—官方原版
222 0
|
30天前
|
存储 前端开发 Go
golang怎么搭建Websocket聊天室服务端
连接的添加和移除 添加连接: 当一个新的WebSocket连接建立时,服务器需要将这个连接添加到全局的连接列表中。多个连接可能同时建立,从而导致多个并发操作试图修改连接列表。 移除连接: 当一个WebSocket连接断开时,服务器需要将这个连接从全局的连接列表中移除。如果多个连接同时断开,可能会导致并发修改连接列表。
|
3月前
|
前端开发 JavaScript Java
Springboot+Netty+WebSocket搭建简单的消息通知
这样,你就建立了一个简单的消息通知系统,使用Spring Boot、Netty和WebSocket实现实时消息传递。你可以根据具体需求扩展和改进该系统。
115 1
|
3月前
|
网络协议 Java 物联网
Spring Boot与Netty打造TCP服务端(解决粘包问题)
Spring Boot与Netty打造TCP服务端(解决粘包问题)
416 1
|
3月前
|
网络协议 Java 关系型数据库
如何公网远程访问本地WebSocket服务端
如何公网远程访问本地WebSocket服务端
|
10月前
|
前端开发 Java 程序员
Spring Boot+Netty+Websocket实现后台向前端推送信息
学过 Netty 的都知道,Netty 对 NIO 进行了很好的封装,简单的 API,庞大的开源社区。深受广大程序员喜爱。基于此本文分享一下基础的 netty 使用。实战制作一个 Netty + websocket 的消息推送小栗子。
|
3月前
ModelScope-FunASR的WebSocket连接中断后,服务端不会自动关闭连接
ModelScope-FunASR的WebSocket连接中断后,服务端不会自动关闭连接【1月更文挑战第11天】【1月更文挑战第55篇】
145 2
|
3月前
|
安全 Java Go
springboot+netty化身Udp服务端,go化身客户端模拟设备实现指令联动
springboot+netty化身Udp服务端,go化身客户端模拟设备实现指令联动
126 0