springboot整合websocket实现微信小程序聊天
WebSocket的定义: WebSocket 是独立的、创建在 TCP 上的协议。 Websocket 通过HTTP/1.1 协议的101状态码进行握手。 为了创建Websocket连接,需要通过浏览器发出请求,之后服务器进行回应,这个过程通常称为“握手”
浏览器发出请求
GET /chat HTTP/1.1 Host: server.example.com Upgrade: websocket Connection: Upgrade Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw== //浏览器随机生成的Base64 加密值 Sec-WebSocket-Protocol: chat, superchat //用户定义的字符串, 用来区分相同url下, 不同服务所需要的协议 Sec-WebSocket-Version: 13 //版本 Origin: http://example.com
服务器响应请求
HTTP/1.1 101 Switching Protocols Upgrade: websocket //已经成功切换websocket协议 Connection: Upgrade //已经成功切换websocket协议 Sec-WebSocket-Accept: HSmrc0sMlYUkAGmm5OPpG2HaGWk= Sec-WebSocket-Protocol: chat
至此,HTTP已经完成它所有工作了,接下来就是完全按照Websocket协议进行了
引入依赖
<!-- SpringBoot WebSocket --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-websocket</artifactId> </dependency>
WebSocketController
SecurityUtils
import cn.hutool.crypto.symmetric.AES;
public class SecurityUtils {
// 加密
public static String encryption(String data){
AES aes = new AES("CBC", "PKCS7Padding",
// 密钥,不可更改
"GzcccPCall012345".getBytes(),
// iv加盐
"GzcccCallDYgjCE0".getBytes());
// 加密为16进制表示
String encryptHex = aes.encryptHex(data);
return encryptHex;
}
// 解密
public static String decryption(String data){
AES aes = new AES("CBC", "PKCS7Padding",
// 密钥,不可更改
"GzcccPCall012345".getBytes(),
// iv加盐
"GzcccCallDYgjCE0".getBytes());
// 加密为16进制表示
String decryptStr = aes.decryptStr(data);
return decryptStr;
}
}
打开小程序
退出小程序
