spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入

✅作者简介:大家好,我是 Meteors., 向往着更加简洁高效的代码写法与编程方式,持续分享Java技术内容。
🍎个人主页:Meteors.的博客
🥭本文内容:spring-websocket在SpringBoot(包含SpringSecurity)项目中的导入

-----------------------------------------------------       目录       ----------------------------------------------------------

目录

一、背景

二、导入实现

1. 后端:pom文件中导入依赖

2.后端:编写后端配置类

3. 后端:编写消息容器与消息处理类

4. 前端:VUE3测试代码

(1) 下载依赖

(2)将测试代码粘贴到空的.vue文件中

4. 测试连接网站:在线网址测试

三、 结果展示


---------------------------------------------------------------------------------------------------------------------------------

一、背景

        最近在项目中想实现实时性比较强的功能,在网上搜索之后发现,推荐websocket实现的比较多,然后也发现spring有对websocket进行包装的类,所以想使用websocket。

二、导入实现

1. 后端:pom文件中导入依赖

        <!--        WebSocket代码依赖          --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency>

2.后端:编写后端配置类

@Configuration
@EnableWebSocket
public class WebSocketConfig implements WebSocketConfigurer {@Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// 注册WebSocket处理器和端点registry.addHandler(new WebSocketHandler(), "/websocket")   // 注册WebSocket处理器,指定处理路径.setAllowedOrigins("*");    // 设置允许的跨域origin(可选)}}

3. 后端:编写消息容器与消息处理类

package com.ruoyi.schooltimetable.websocket;import org.springframework.stereotype.Component;
import org.springframework.web.socket.CloseStatus;
import org.springframework.web.socket.TextMessage;
import org.springframework.web.socket.WebSocketMessage;
import org.springframework.web.socket.WebSocketSession;
import org.springframework.web.socket.handler.TextWebSocketHandler;import java.util.ArrayList;
import java.util.List;@Component
public class WebSocketHandler extends TextWebSocketHandler {private List<WebSocketSession> sessions = new ArrayList<>();public void add(WebSocketSession session) {sessions.add(session);}public void remove(WebSocketSession session) {sessions.remove(session);}@Overridepublic void afterConnectionEstablished(WebSocketSession session) throws Exception {// 当 WebSocket 连接建立成功后执行该方法System.err.println("------------   连接完成   ------------");// 保存 WebSocketSession 到某个容器中,方便后续处理sessions.add(session);// 发送欢迎消息给客户端String welcomeMessage = "欢迎连接WebSocket服务器!";TextMessage textMessage = new TextMessage(welcomeMessage);session.sendMessage(textMessage);}@Overridepublic void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {// 当接收到客户端发送的WebSocket消息时执行该方法// 获取消息内容String receivedMessage = message.getPayload().toString();// 处理消息,如解析消息内容、发送响应等//// 发送响应给客户端String response = "收到您的消息:" + receivedMessage;TextMessage textMessage = new TextMessage(response);session.sendMessage(textMessage);}@Overridepublic void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {// 当WebSocket传输发生错误时执行该方法// 处理错误,如记录日志、关闭连接等//// 关闭WebSocket连接session.close();}@Overridepublic void afterConnectionClosed(WebSocketSession session, CloseStatus status) throws Exception {// 当WebSocket连接关闭后执行该方法System.err.println("---------------   断开成功   ---------------");// 清理操作,如释放资源、通知其他用户等// 从容器中移除WebSocketSessionsessions.remove(session);}
}

如果是在springsecurity中进行配置,需要在SpringSecurity配置类中对websocket的接口进行放行,不然会连接失败。位置:

4. 前端:VUE3测试代码

(1) 下载依赖

执行:

npm install websocket

(2)将测试代码粘贴到空的.vue文件中

<template><div>WebSocket Example<button @click="connect">Connect</button><button @click="disconnect">Disconnect</button><button @click="sendMessage">Send Message</button></div>
</template><script>
// import { ref } from 'vue';export default {name: 'WebSocketExample',data() {return {socket: null,message: '',receivedMessage: ''};},methods: {connect() {if (!this.socket || this.socket.readyState !== WebSocket.OPEN) {alert('111')this.socket = new WebSocket('ws://localhost:8095/websocket');this.socket.onopen = () => {alert('WebSocket connected')console.log('WebSocket connected');};this.socket.onmessage = (event) => {this.receivedMessage = event.data;};this.socket.onclose = () => {console.log('WebSocket disconnected');};}},disconnect() {if (this.socket && this.socket.readyState === WebSocket.OPEN) {this.socket.close();}},sendMessage() {if (this.socket && this.socket.readyState === WebSocket.OPEN) {this.socket.send(this.message);}}}
};
</script>

4. 测试连接网站:在线网址测试

测试网址:

Websocket在线测试-Websocket接口测试-Websocket模拟请求工具Websocket模拟请求工具:在线Websocket测试工具,Websocket接口测试,外网内网通用Websocket请求测试,内网测试环境填入内网服务端IP和端口即可,在线模拟Websocket请求在线工具http://www.yunjson.com/websocket/

三、 结果展示

  • 在VUE中测试连接:·
  • 在测试网址中测试连接:

  • 后端控制台的显示:

最后,

有问题可以打在评论区,希望文章对你有所帮助...!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/10385.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL的变量、流程控制与游标

目录 1.变量的分类 1.系统变量的分类 1.1.二者关系 2.查看系统变量 3.修改系统变量的值 4.用户变量 4.1会话用户变量 1.变量声明与赋值 2.变量使用 4.2.局部变量 1.使用declare 声明 2.局部变量声明格式 3.局部变量赋值 4.变量使用 5.定义条件与处…

微信小程序客服系统-对接消息推送-对接模板订阅消息-嵌入webview客服链接

想要给自己的小程序增加客服系统功能 小程序客服对接导自己的系统等需求&#xff0c;可以参照我开发的客服系统&#xff0c;实现私有化部署搭建对接的微信小程序 小程序消息推送对接 首先登录小程序后台在小程序后台>开发管理>开发设置>服务器域名部分&#xff0c;配置…

IPsec配置工具IP xfrm

IP命令支持IPSec配置&#xff0c;子命令为ip xfrm。命令内容如下&#xff1a; IP-XFRM(8) Linux IP-XFRM(8) NAME ip-xfrm - transform configurationSYNOPSIS ip [ OPTIONS ] xfrm { COMMAND | help }ip xfrm XFRM-OBJECT { COMMAND | help }XFRM-OBJECT : state | policy |…

Sentinel限流中间件

目录 介绍 Sentinel 的特征 Sentinel 的组成 实战使用 简单实例 配置本地控制台 使用可视化ui配置简单流控 配置异步任务限流 使用注解定义限流资源 SpringCloud整合Sentinel 简单整合 并发线程流控 关联模式 整合openFeign使用 介绍 随着微服务的流行&#xff0…

Ansible自动化运维工具

Ansible自动化运维工具 一、ansible介绍二、ansible环境安装部署三、ansible命令行模块1、command模块2、shell模块3、cron模块4、user模块5、group模块6、copy模块7、file模块8、hostname模块9、ping模块10、yum模块11、service/systemd模块12、script模块13、mount模块14、ar…

list源码分析,基于c++ 和vs2019,cpp20标准

list源码分析,基于c 和vs2019&#xff0c;cpp20标准。结构确实如图&#xff0c;双向环形链表。

2、Linux驱动开发:模块_引用符号

目录 &#x1f345;点击这里查看所有博文 随着自己工作的进行&#xff0c;接触到的技术栈也越来越多。给我一个很直观的感受就是&#xff0c;某一项技术/经验在刚开始接触的时候都记得很清楚。往往过了几个月都会忘记的差不多了&#xff0c;只有经常会用到的东西才有可能真正记…

linux部署es+kibana

部署kibana与es 3.4.1、拷贝文件 首先把elasticsearch-7.3.1-linux-x86_64.tar.gz 和kibana-7.3.1-linux-x86_64.tar.gz拷贝到linux上&#xff0c;比如我是拷贝/usr/local 目录下 3.4.2、解压文件 然后分别执行tar -zxvf elasticsearch-7.3.1-linux-x86_64.tar.gz和tar -zx…

python读取json文件

import json# 文件路径(同目录文件名即可,不同目录需要绝对路径) path 1.json# 读取JSON文件 with open(path, r, encodingutf-8) as file:data json.load(file)#data为字典 print(data) print(type(data))

网络安全工程师证书有什么用?什么是网络安全工程师?你想知道的都在这里

随着互联网的发展和大数据时代的到来&#xff0c;网络已经日渐深入到我们生活、工作中的方方面面&#xff0c;社会信息化和信息网络化&#xff0c;突破了应用信息在时间和空间上的障碍&#xff0c;使信息的价值不断提高。但是&#xff0c;与此同时&#xff0c;网页篡改、计算机…

面试题 -- OC基础知识

文章目录 1. #import 跟#include 又什么区别&#xff0c;class呢, #import<> 跟 #import””又什么区别?2. 属性关键字assign、retain、weak、copy3. strong和weak关键字有什么区别4. 什么情况下使用weak关键字&#xff1f;相比于assign有什么不同&#xff1f;5. atomic…

【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程

【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程 文章目录 【深度学习】【三维重建】windows11环境配置tiny-cuda-nn详细教程前言确定版本对应关系源码编译安装tiny-cuda-nn总结 前言 本人windows11下使用【Instant Neural Surface Reconstruction】算法时需要…

小城市当程序员好不好?

在职业发展中&#xff0c;小城市和大城市都有各自的机会和挑战。在大城市&#xff0c;C#的应用比例可能相对较低&#xff0c;学习C可能有一定的难度&#xff0c;而学习Java最好有人指导。在小城市&#xff0c;机会相对较少&#xff0c;跳槽的选择也有限。然而&#xff0c;小城市…

【每日随笔】人为制造稀缺 ( 粮食 | 买房 | 租房 | 钻石 | 教育 )

文章目录 一、人为制造的稀缺资源 - 粮食二、人为制造的稀缺资源 - 买房三、人为制造的稀缺资源 - 租房四、人为制造的稀缺资源 - 钻石五、人为制造的稀缺资源 - 教育 人为制造 稀缺资源 是 暴利 的挣钱方式 ; 本来不稀缺的资源 , 人人都有 , 人人都应该享有的资源 , 人为制造…

WPF实战学习笔记18-优化设计TodoView

文章目录 优化设计TodoView修复新增项目无法编辑问题增加了对完成状态的区分增加了选项卡删除功能更新删除请求URI添加删除命令并初始化UI添加删除按钮更改控制器 增加查询结果为空的图片增加转换器修改UI添加资源、命名空间 添加相关元素 增加了根据状态查询的功能Mytodo.Serv…

Ansible 自动化运维工具

目录 一、概述 1.ansible 简介 2.ansible 特性 3.ansible 架构 二、ansible 环境安装部署 1.管理端安装 ansible&#xff08;192.168.88.10&#xff09; 2. ansible 工作目录 3. 配置主机清单 4.配置密钥对验证 三、ansible 命令行模块 1.command 模块 2.shell 模块…

牛客小白月赛76 E.括号序列操作专家(贪心)

氧气少年有一个长度为 n的括号序列&#xff0c;括号序列只包含左括号 ( 和右括号 )。 一个括号序列是合法的&#xff0c;当且仅当此括号序列可以通过插入加号 和数字 1 得到一个正确的算术表达式。例如&#xff1a;括号序列 (())()&#xff0c;()&#xff0c;和 (()(())) 都是…

7月27日,每日信息差

1、万科与万达长春合作项目纠纷已基本达成和解&#xff0c;万达商管部分被冻结股权即将解冻 2、WPS AI海外版开启公测.由OpenAI和PaLM2提供大模型支持。目前&#xff0c;WPS AI在Windows和Android端的WPS Office的文字和PDF组件上可用。未来&#xff0c;它将嵌入到文字、演示文…

Git基本操作

Git使用 1.命令行操作 1.1 本地库操作 1.1.1 本地库初始化 命令&#xff1a; git init 效果&#xff1a; 注意&#xff1a;.git目录中存放的是本地库相关的子目录和文件&#xff0c;不能删除和修改。 1.1.2 设置签名 作用&#xff1a;区分不同的开发人员身份 格式&…

思科路由器交换机密码破解教程

1. 路由器密码的恢复. 2600、3600等新系列路由器步骤&#xff1a; 1、启动路由器&#xff0c;60秒内按下ctrlbreak键2、rommon>confreg 0x21423、rommon>reset4、router#copy startup-config running-config5、router(config)#no enable secrect //可以删除密码也可以更…