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.失败可以添加重试次数


相关文章
|
7月前
|
网络协议 JavaScript 前端开发
netty 实现 websocket
netty 实现 websocket
179 1
|
7月前
|
Java Maven
【Netty 网络通信】启动通信服务端
【1月更文挑战第9天】【Netty 网络通信】启动通信服务端
|
2月前
|
开发框架 前端开发 网络协议
Spring Boot结合Netty和WebSocket,实现后台向前端实时推送信息
【10月更文挑战第18天】 在现代互联网应用中,实时通信变得越来越重要。WebSocket作为一种在单个TCP连接上进行全双工通信的协议,为客户端和服务器之间的实时数据传输提供了一种高效的解决方案。Netty作为一个高性能、事件驱动的NIO框架,它基于Java NIO实现了异步和事件驱动的网络应用程序。Spring Boot是一个基于Spring框架的微服务开发框架,它提供了许多开箱即用的功能和简化配置的机制。本文将详细介绍如何使用Spring Boot集成Netty和WebSocket,实现后台向前端推送信息的功能。
552 1
|
2月前
|
网络协议 前端开发
netty的TCP服务端和客户端实现
本文介绍了使用Netty框架实现TCP服务端和客户端的步骤,包括添加Netty依赖、编写服务端和客户端的代码,涉及NioEventLoopGroup、ServerBootstrap、Bootstrap、ChannelInitializer等核心组件,以及如何启动服务端监听和客户端连接。
220 4
|
2月前
|
JavaScript 前端开发 测试技术
前端全栈之路Deno篇(五):如何快速创建 WebSocket 服务端应用 + 客户端应用 - 可能是2025最佳的Websocket全栈实时应用框架
本文介绍了如何使用Deno 2.0快速构建WebSocket全栈应用,包括服务端和客户端的创建。通过一个简单的代码示例,展示了Deno在WebSocket实现中的便捷与强大,无需额外依赖,即可轻松搭建具备基本功能的WebSocket应用。Deno 2.0被认为是最佳的WebSocket全栈应用JS运行时,适合全栈开发者学习和使用。
139 7
|
2月前
|
前端开发 网络协议
netty整合websocket(完美教程)
本文是一篇完整的Netty整合WebSocket的教程,介绍了WebSocket的基本概念、使用Netty构建WebSocket服务器的步骤和代码示例,以及如何创建前端WebSocket客户端进行通信的示例。
298 2
netty整合websocket(完美教程)
|
3月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
5月前
|
存储 前端开发 Go
golang怎么搭建Websocket聊天室服务端
连接的添加和移除 添加连接: 当一个新的WebSocket连接建立时,服务器需要将这个连接添加到全局的连接列表中。多个连接可能同时建立,从而导致多个并发操作试图修改连接列表。 移除连接: 当一个WebSocket连接断开时,服务器需要将这个连接从全局的连接列表中移除。如果多个连接同时断开,可能会导致并发修改连接列表。
|
7月前
|
前端开发 JavaScript Java
Springboot+Netty+WebSocket搭建简单的消息通知
这样,你就建立了一个简单的消息通知系统,使用Spring Boot、Netty和WebSocket实现实时消息传递。你可以根据具体需求扩展和改进该系统。
174 1
|
7月前
|
网络协议 Java 物联网
Spring Boot与Netty打造TCP服务端(解决粘包问题)
Spring Boot与Netty打造TCP服务端(解决粘包问题)
1087 2