Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到
Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到
问题出现
在我后端springboot启动后,前端无法请求websocket请求连接到我们websocket服务器。
想要的效果
在我后端springboot启动后,前端可以请求到我们websocket服务器,并且进行交互。
问题排查
出现的问题A
出现问题的代码:
package com.gsxy.core.config;import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker;
import org.springframework.web.socket.config.annotation.StompEndpointRegistry;
import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer;@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {@Overridepublic void configureMessageBroker(MessageBrokerRegistry config){config.enableSimpleBroker("/topic");config.setApplicationDestinationPrefixes("/app");}@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry){registry.addEndpoint("/ws").withSockJS();}}
问题出在没有告诉spring遇见wensocket协议该如何处理。
改正后的代码:
package com.gsxy.core.config;import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.config.annotation.EnableWebSocket;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;@Configuration
@EnableWebSocket
public class WebSocketConfig {@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}}
出现的的问题B
问题出在Websocket在controller包下,在我们aop SystemAopImpl,对我们的contorller包下进行了所有代码增强。
/*** @author zhuxinyu 2023-10-23*/
@Component
@Aspect
public class SystemAopImpl implements SystemAop {/*** @author zhuxinyu 2023-10-23* 清理ThreadLocal 防止内存泄漏* @param joinpoint* @throws Exception*/@Override@After("execution(* com.gsxy.core.controller.*.*(..))")public void removeAllThreadLocal(JoinPoint joinpoint) throws Exception {ThreadLocalUtil.mapThreadLocalOfJWT.remove();ThreadLocalUtil.mapThreadLocal.remove();ThreadLocalUtil.DataOfThreadLocal.remove();}}
因为在Spring AOP中使用的是IOC 和 AOP动态代理创建对象,在WebSocket中,如果代理类被代理了,可能会出现问题因为WebSocket容器会查找类上的注解,但是无法找到代理类上,因为@ServerEndpoint来自Java标准注解,并不是AOP,如果我们使用的是cglib动态代理技术,执行的是目标类的子类,这个字类包含我们的拦截逻辑和目标方法的引用,所以无法读取到websocket的注解,导致无法访问websocket,因为我们的websocket没有实现接口,默认实现的cglib动态代理技术,所以触犯了这个问题。jdk动态代理,他执行的是代理对象,这个代理类是包含了我们的环绕逻辑和我们目标类的代理对象,所以不会导致注解失效。
总结
使用websocket不能被cglib所代理。
必须告诉spring遇见websocket如何解决
相关文章:
Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到
Springboot websocket前端无法访问到,Websocket因AOP代理 前端无法请求到 问题出现 在我后端springboot启动后,前端无法请求websocket请求连接到我们websocket服务器。 想要的效果 在我后端springboot启动后,前端可以请求到我们websocket…...
基于高质量训练数据,GPT-4 Turbo更出色更强大
11月7日消息,OpenAI在首届开发者大会上正式推出了GPT-4 Turbo。 与GPT-4相比,GPT-4 Turbo主要有6方面的提升: 1、扩展下文对话长度:GPT4最大只能支持8k的上下文长度(约等于6000个单词),而GPT-4…...
jenkins + gitlab 自动部署(webhook)
Jenkins是一个流行的开源CI/CD工具,可以与Git等版本控制系统集成,实现自动构建、测试和部署。Webhook是一种机制,可以在Git仓库中设置,在代码提交或合并请求时触发Jenkins构建任务,以完成自动化部署。 实操 设备信息 …...
【数据集】全网最全的常见已公开医学影像数据集
目录 一,极市医学数据集汇总 1.CT 医学图像 编辑 2.恶性与良性皮肤癌 3.白内障数据集 4.胸部 X 光图像(肺炎) 5.用于图像增强的内窥镜真实合成曝光过度和曝光不足帧 6.医学家 7.乳房组织病理学图像 8.皮肤癌 MNIST:HA…...
图形数据库的实战应用:如何在 Neo4j 中有效管理复杂关系
关系数据库管理系统( RDBMS ) 代表了最先进的技术,这在一定程度上要归功于其由周边技术、工具和广泛的专业技能组成的完善的生态系统。 在这个涵盖信息技术(IT) 和运营技术(OT) 的技术革命时代,人们普遍认识到性能方面出现了重大挑战,特别是…...
Linux内核中的overlay文件系统
一、简介 Docker 内核实现容器的功能用了linux 内核中的三个特性 Namespace、Cgroup、UnionFs,今天我们来说一下UnionFs。 linux UnionFs 实现的是overlay 文件系统 OverlayFs 文件系统分为三层, lower 是只读层 Upper 是可读写 Merged 是 lower 和U…...
archery修改为不能自提自审核上线SQL
目录 背景修改代码效果参考 背景 我和同事都可以提交上线SQL,但是不能自己提交的SQL自己去审核通过。目前的情况是可以自提自审。 修改代码 找到/opt/archery/sql/utils/workflow_audit.py文件 ...省略...# 判断用户当前是否是可审核staticmethoddef can_revie…...
如何处理git多分支
本篇文章主要处理以下两种多分支问题 如何将自己在本地的修改上传到一个新的Git分支(比如用于测试,不合并进main分支)?如何在一个新的本地仓库拉取一个项目的非main分支,并处理他们关联关系? 1. 将自己在…...
Proteus仿真--基于DS1302与数码管设计的可调电子钟
本文主要介绍基于51单片机的DS1302的可调式电子钟实验(完整仿真源文件及代码见文末链接) 仿真图如下 其中数码管显示电子钟时间信息,按键用于调节时间,时间芯片选用DS1302芯片 仿真运行视频 Proteus仿真--基于DS1302与数码管设…...
ESP32网络开发实例-远程Web串口监视器
远程Web串口监视器 文章目录 远程Web串口监视器1、应用介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将构建一个 ESP32 网络服务器,用作远程串行监视器。 基于 Web 的串行监视器的工作方式与通常用于调试目的的 Arduino IDE 串行监视器的工作方式相同。 1、应用介绍 …...
xadmin后台在每一行记录增加一个复制链接按钮
xadmin后台在每一行记录增加一个复制链接按钮 1、效果 点击复制后,自动把url链接复制到粘贴板,按Ctrl+v即可显示复制内容。 2、实现代码 adminx.py # 用户管理 class UserWhiteListAdmin(object):search_fields = [name, mobile] # 检索字段list_display...
LVS+Keepalived 高可用群集
一、一.Keepalived工具介绍 专为LVS和HA设计的一款健康检查工具 • 支持故障自动切换(Failover) • 支持节点健康状态检查(Health Checking) • 官方网站:http://www.keepalived.org/ 二、Keepalived工作原理 • …...
数据传输的思考
Wi-Fi:Wi-Fi是一种无线网络技术,可以用于无线互联网接入、局域网通信和数据传输等。Wi-Fi基于IEEE 802.11标准,通过无线信号传输数据,提供高速的无线网络连接。Wi-Fi可用于连接设备与路由器或者设备之间的直接通信,可以…...
ETL-使用kettle批量复制sqlserver数据到mysql数据库
文章标题 1、安装sqlserver数据库2、下载kettle3、业务分析4、详细流程(1)转换1:获取sqlserver所有表格名字,将记录复制到结果(2)转换2:从结果设置变量(3)转换3ÿ…...
交流充电桩与直流充电桩的区别
1、背景 直流充电桩的学名是非车载充电机,是相对于交流充电桩而言的。交流充电桩是采用传导方式为具备车载充电机的电动汽车提供交流电能的专用装置。 2、交流充电桩和直流充电桩 1.1、交流充电桩 交流充电桩包括单相和三相交流充电桩。 图一是交流充电桩原理框…...
基于单片机公交安全预警系统仿真设计
**单片机设计介绍, 基于单片机公交安全预警系统仿真设计 文章目录 一 概要二、功能设计设计思路 三、 软件设计原理图 五、 程序六、 文章目录 一 概要 基于单片机的公交安全预警系统可以被设计成能够实时监测公交车辆的行驶状态,并在发生异常情况时进行…...
HarmonyOS基础组件之Button三种类型的使用
简介 HarmonyOS在明年将正式不再兼容Android原生功能,这意味着对于客户端的小伙伴不得不开始学习HarmonyOS开发语言。本篇文章主要介绍鸿蒙中的Button使用。 HarmonyOS中的Button相较于Android原生来说,功能比较丰富,扩展性高,减…...
Using the File Class使用文件类
Using the File Class 使用文件类 The file layout class enables you to perform file input and output operations with Application Engine using PeopleCode. A file object enables you to open a file (for reading or writing), read data from a file, or write da…...
【Kafka】Java整合Kafka
1.引入依赖 <dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.3.1</version></dependency> 2.搭建生产者 package com.wen.kafka;import org.apache.kafka.clients.produ…...
所里网连不上,我服了
所里网连不上,我服了所里网连不上,我服了所里网连不上,我服了...
WebPlotDigitizer完全指南:如何从图表图片中快速提取数值数据
WebPlotDigitizer完全指南:如何从图表图片中快速提取数值数据 【免费下载链接】WebPlotDigitizer Computer vision assisted tool to extract numerical data from plot images. 项目地址: https://gitcode.com/gh_mirrors/we/WebPlotDigitizer 你是否曾经面…...
从“身份识别”到“数据对话”:I2C、SPI、CAN、PCIe四大总线通信机制深度剖析
1. 总线通信的本质:从"你是谁"到"我们怎么聊" 在嵌入式系统的世界里,总线就像硬件设备之间的社交网络。想象你走进一个会议室,首先要确认每个人的身份(握手或名片交换),然后才能开始有…...
手把手教你用VMware Workstation 15.5.1安装FreeBSD 12.2(附防火墙项目实战场景)
在VMware中部署FreeBSD 12.2:从零构建企业级防火墙的完整指南 当我们需要构建一个高性能、可定制的网络防火墙时,FreeBSD系统因其卓越的网络堆栈和稳定性成为众多专业防火墙解决方案的基础。本文将带您从零开始,在VMware Workstation 15.5.1环…...
如何快速创建专业条码:开源字体完整指南
如何快速创建专业条码:开源字体完整指南 【免费下载链接】librebarcode Libre Barcode: barcode fonts for various barcode standards. 项目地址: https://gitcode.com/gh_mirrors/li/librebarcode 你知道吗?生成专业条码可以像打字一样简单&…...
3分钟上手SVG路径编辑器:零代码玩转矢量图形编辑
3分钟上手SVG路径编辑器:零代码玩转矢量图形编辑 【免费下载链接】svg-path-editor Online editor to create and manipulate SVG paths 项目地址: https://gitcode.com/gh_mirrors/sv/svg-path-editor 还在为SVG路径代码头疼吗?SVG Path Editor是…...
从Scratch一级到四级:手把手带你拆解官方考纲,规划孩子的图形化编程进阶之路
从Scratch一级到四级:构建孩子的图形化编程能力成长地图 当孩子第一次拖动彩色积木块让小猫在屏幕上移动时,他们眼中闪烁的光芒往往预示着一段奇妙旅程的开始。作为教育工作者或家长,我们面临的挑战是如何将这种初始的好奇心转化为系统的编程…...
解码NR(三):5G Type I 码本(codebook)的数学原理与波束赋形
1. 5G Type I码本的基础概念 想象一下你在一个嘈杂的会议室里,想要让对面的人听清你说的话。你会怎么做?很自然地,你会把手拢在嘴边,让声音朝着特定方向传播。这就是波束赋形(Beamforming)最朴素的理解——通过控制信号的发射方向…...
3分钟掌握Windows风扇控制:免费神器Fan Control终极使用指南
3分钟掌握Windows风扇控制:免费神器Fan Control终极使用指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trend…...
SQLite4Unity3d终极教程:在Unity中快速集成SQLite数据库的完整指南
SQLite4Unity3d终极教程:在Unity中快速集成SQLite数据库的完整指南 【免费下载链接】SQLite4Unity3d SQLite made easy for Unity3d 项目地址: https://gitcode.com/gh_mirrors/sq/SQLite4Unity3d SQLite4Unity3d是专为Unity开发者设计的强大数据库集成解决方…...
如何用Python脚本快速搞定京东抢购:2025终极指南
如何用Python脚本快速搞定京东抢购:2025终极指南 【免费下载链接】JDspyder 京东预约&抢购脚本,可以自定义商品链接 项目地址: https://gitcode.com/gh_mirrors/jd/JDspyder 还在为抢不到心仪的京东商品而烦恼吗?无论是限量茅台、…...
