当前位置: 首页 > news >正文

spring websocket 调用受权限保护的方法失败

版本

spring-security 5.6.10
spring-websocket 5.3.27

现象

通过AbstractWebSocketHandler实现websocket端点处理器
调用使用@PreAuthorize注解的方法报错,无法在SecurityContext中找到认证信息

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException
An Authentication object was not found in the SecurityContext

原因

调用websockethandler的线程非用户会话线程,所以安全上下文中没有认证信息

解决

在处理消息时将WebsocketSession中保存的认证信息设置到SecurityContext中

import org.springframework.web.socket.handler.AbstractWebSocketHandler;
public class MyWsHandler extends AbstractWebSocketHandler {public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) throws Exception {// 在安全上下文中设置认证信息SecurityContextHolder.getContext().setAuthentication((Authentication)session.getPrincipal());super.handleMessage(session, message);}protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {// 调用受保护的方法this.service.doSomething();}
}
http://www.lryc.cn/news/104799.html

相关文章:

  • Vue.js2+Cesium 四、模型对比
  • Linux 之 Vi 编辑器
  • Python超实用!批量重命名文件/文件夹,只需1行代码
  • sqoop
  • PySpark 数据操作(综合案例)
  • 产品经理如何平衡用户体验与商业价值?
  • 【PostgreSQL】系列之 一 CentOS 7安装PGSQL15版本(一)
  • Nginx解决文件服务器文件名显示不全的问题
  • IO进程线程第四天(8.1)
  • WAF绕过-权限控制篇-后门免杀
  • LED灯的驱动,GPIO子系统,添加按键的中断处理
  • Gradle和Maven的区别
  • C#中 使用yield return 优化大数组或集合的访问
  • ROS实现导航中止(pub命令版+C++代码版)
  • 【VTK】读取一个 STL 文件,并使用 Qt 显示出来,在 Windows 上使用 Visual Studio 配合 Qt 构建 VTK
  • 数据结构--基础知识
  • 天工开物 #7 Rust 与 Java 程序的异步接口互操作
  • python实现视频转GIF动图(无水印,包含代码详解和.exe执行文件)
  • 一套AI+医疗模式的医院智慧导诊系统源码:springboot+redis+mybatis plus+mysql
  • Android 使用modbus协议与可能遇到的问题解决一览
  • Virtualbox虚拟机中Ubuntu忘记密码
  • isPresent()
  • DC.js教程_编程入门自学教程_菜鸟教程-免费教程分享
  • Qt应用开发(基础篇)——滑块类 Slider、ScrollBar、Dial
  • iOS的NSUserActivity
  • Android HTTP使用(详细版)
  • 【雕爷学编程】MicroPython动手做(25)——语音合成与语音识别
  • 前端开发:基于cypress的自动化实践
  • C++类和对象(下部曲)
  • 解决eclipse 打开报错 An error has occurred. See the log file null.