springboot整合websocket进行鉴权遇到的问题

这篇具有很好参考价值的文章主要介绍了springboot整合websocket进行鉴权遇到的问题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、问题背景

之前项目遇到过的问题,就是需要通过websocket给前端和小程序推送数据。因为nginx和wss的问题就不提,终于是通信连上并能发送接收数据了。但是之后有遇到一个需要鉴权的问题,之前用websocket没怎么考虑到鉴权的问题,正常使用起来好像也没有办法带token来过权限,都是直接把security解开来用。

二、自己的想法

一开始首先想到的就是在后面多带几个参数,通过@PathParam取出来只来进行验证,最简单的例如传个明文和一个密文,拿到后对比确认后,才把session放入集合里,再进行发送数据。但是后来想了一下,这样还是不可避免的会被别人连接上也防止不了别人推送数据上来,所以还是不行。

三、网上看到的方法

之前是通过@ServerEndpoint注入的:

@Configuration
public class WebSocketConfig //implements WebSocketConfigurer
{
   

    /**
     * 使用spring boot时,使用的是spring-boot的内置容器,
     * 如果要使用WebSocket,需要注入ServerEndpointExporter
     *
     * @return
     */
    @Bean
    public ServerEndpointExporter serverEndpointExporter() {
   
        return new ServerEndpointExporter();
    }
}
@ServerEndpoint(value="/ocwebsocket/{username}")
@Component
@Slf4j
public class WebsocketService {
   
}

在网上看到了一个方法,是设置拦截器,实现HandshakeInterceptor接口,然后在config里面重写registerWebSocketHandlers方法,把拦截器和文字数据处理都设置进去。拦截器里还是用两个参数一个明文一个密文进行比对判断是否有权限连接。文章来源地址https://www.toymoban.com/news/detail-429500.html

@Component
public class MyHandshakeInterceptor implements HandshakeInterceptor {
   
    /**
     * 握手之前,若返回false,则不建立链接 *
     *
     * @param request
     * @param response
     * @param wsHandler
     * @param attributes
     * @return
     */
    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse
            response, WebSocketHandler wsHandler, Map<String, Object> attributes) {
   
        //将用户id放入socket处理器的会话(WebSocketSession)中
        ServletServerHttpRequest serverHttpRequest = (ServletServerHttpRequest) request;
        //获取参数
        String userId = serverHttpRequest.getServletRequest().getParameter("userId");
        String sign = serverHttpRequest.getServletRequest().getParameter("sign");

        attributes.put("uid", userId);
        attributes.put("sign", sign);
        //可以在此处进行权限验证,当用户权限验证通过后,进行握手成功操作,验证失败返回false
        if (

到了这里,关于springboot整合websocket进行鉴权遇到的问题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • WebSocket--整合springboot

    目录 握手拦截器 WebSocket处理程序 HttpSessionHandshakelnterceptor (抽象类):   握手拦截器,在握手前后添加操作 AbstractWebSocketHandler (抽象类) :   WebSocket处理程序,监听连接前,连接中,连接后WebSocketConfigurer (接口):    配置程序,比如配置监听哪个端口,上面的握手拦截器,处理

    2024年01月16日
    浏览(42)
  • SpringBoot整合Websocket(Java websocket怎么使用)

    WebSocket 是一种基于 TCP 协议的全双工通信协议,可以在浏览器和服务器之间建立 实时、双向的数据通信 。可以用于在线聊天、在线游戏、实时数据展示等场景。与传统的 HTTP 协议不同,WebSocket 可以保持 长连接 ,实时传输数据,避免了频繁的 HTTP 请求和响应,节省了网络带

    2024年02月10日
    浏览(28)
  • SpringBoot整合WebSocket详细教程

    共开启两个页面,实现一对一聊天。 服务端代码:https://gitee.com/lianaozhe/springboot-websocket.git 导入相关依赖: WebSocketConfig配置类: WebSocket操作类: TestController测试接口类: test.html文件: 复制test.html文件为test2.html文件,将上面的userId由’20’改为’10’,后面测试使用。 运行服

    2024年02月01日
    浏览(31)
  • [超详细]SpringBoot整合WebSocket

    WebSocket 是一种在单个 TCP 连接上进行全双工通信的协议,它允许在浏览器和服务器之间进行实时的、双向的通信。相对于传统的基于请求和响应的 HTTP 协议,WebSocket 提供了一种更有效、更实时的通信方式,适用于需要实时更新、实时通知和实时交互的应用。 WebSocket 的一些关

    2024年02月11日
    浏览(26)
  • 【WebSocket】SpringBoot整合WebSocket实现聊天室(一)

    目录 一、准备 1、引入依赖 2、创建配置类 二、相关注解 首先我们需要在项目中引入依赖,有两种方式。第一种我们可以在创建Spring Boot项目时搜索WebSocket然后勾选依赖 第二种是我们可以直接在项目的pom.xml文件中插入以下依赖 我们需要进行如下配置 ServerEndpointExporter 是一个

    2024年02月13日
    浏览(26)
  • sentinel整合nacos鉴权403问题(Nacos get changed dataId error, code: 403)

    由于spring-cloud-starter-alibaba-sentinel-2.2.1.RELEASE所依赖的spring-cloud-alibaba-sentinel-datasource-2.2.1.RELEASE不支持nacos鉴权,需要升级spring-cloud-starter-alibaba-sentinel版本或升级spring-cloud-alibaba-sentinel-datasource至2.2.2.RELEASE或以上版本。推荐仅升级spring-cloud-alibaba-sentinel-datasource至2.2.2.RELEASE,对其

    2024年02月11日
    浏览(25)
  • 【十六】springboot整合WebSocket(超详细)

     springboot篇章整体栏目:  【一】springboot整合swagger(超详细 【二】springboot整合swagger(自定义)(超详细) 【三】springboot整合token(超详细) 【四】springboot整合mybatis-plus(超详细)(上) 【五】springboot整合mybatis-plus(超详细)(下) 【六】springboot整合自定义全局异常处

    2023年04月09日
    浏览(25)
  • springboot整合websocket(详解、教程、代码)

    大家好,我是酷酷的韩~ 1.websocket定义 WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信——允许服务器主动发送信息给客户端。websocket 协议是在 http 协议上的一种补充协议,是 html5 的新特性,是一种持久化的协议。 2.websocket工作原理

    2024年02月02日
    浏览(36)
  • WebSocket整合springboot显示进度条

    SpringBoot整合WebScoket显示进度条 - 钟小嘿 - 博客园 对于大文件上传解析,若直接上传,会超时,可使用WebSocket长链接方式实时显示文件的上传状态,实际上是从文件上传到内容解析完成存入数据库的过程,各个阶段的进度可自定义。 本文使用SpringBoot+WebSocket+vue2.0+Element+nginx实

    2024年02月14日
    浏览(30)
  • Springboot 整合 WebSocket ,使用STOMP协议 ,前后端整合实战 (一)(1)

    server: port: 9908 3.WebSocketConfig.java 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.springfra

    2024年04月25日
    浏览(32)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包