springboot如何获取websocket的header头信息

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

websocket协议与http协议类似,也有属于自己的头信息,如下图所示,为postman在连接时自定义的header:

springboot如何获取websocket的header头信息


那么在后端中,如何像http的HttpServletRequest一样来获取这个头信息的内容呢?

  1. 自定义一个WebSocket配置类:

    • modifyHandshake()方法:建立握手时,连接前的操作,可以获取到源信息,并且传递给Session
    • getEndpointInstance()方法:初始化端点对象,也就是被@ServerEndpoint所标注的对象
    @Configuration
    public class WebSocketConfig extends ServerEndpointConfig.Configurator {
    
        @Bean
        public ServerEndpointExporter serverEndpointExporter() {
            return new ServerEndpointExporter();
        }
    	
    	/**
    	* 建立握手时,连接前的操作
    	*/
        @Override
        public void modifyHandshake(ServerEndpointConfig sec, HandshakeRequest request, HandshakeResponse response) {
            // 这个userProperties 可以通过 session.getUserProperties()获取
            final Map<String, Object> userProperties = sec.getUserProperties();
            Map<String, List<String>> headers = request.getHeaders();
            List<String> remoteIp = headers.get("x-forwarded-for");
            List<String> header1 = headers.get("x1");
            List<String> header2 = headers.get("x2");
            userProperties.put("header1", header1.get(0));
            userProperties.put("header2", header2.get(0));
            userProperties.put("x-forwarded-for", remoteIp.get(0));
        }
    
    	/**
    	* 初始化端点对象,也就是被@ServerEndpoint所标注的对象
    	*/
        @Override
        public <T> T getEndpointInstance(Class<T> clazz) throws InstantiationException {
            return super.getEndpointInstance(clazz);
        }
    }
    
    
  2. @ServerEndpoint(value = "/websocket/document",configurator = WebSocketConfig.class)中指定我们的自定义配置类。

  3. 封装一个获取头信息的方法

        public static String getHeader(Session session, String headerName) {
            final String header = (String) session.getUserProperties().get(headerName);
            if (StrUtil.isBlank(header)) {
                log.error("获取header失败,不安全的链接,即将关闭");
                try {
                    session.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            return header;
        }
    
  4. 在任意能够获取到Session的地方使用即可

        @OnMessage
        public void onMessage(Session session, String message) {
            log.info("client received message:{}, session:{},", message,session.hashCode());
            final String header = WebSocketUtil.getHeader(session, "header1");
            try {
                session.getBasicRemote().sendText(header);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    

值得注意的是:文章来源地址https://www.toymoban.com/news/detail-427840.html

  • Configurator 实现类只在初始化端点时时执行一次
  • 其他的后续遇到再回来补…

到了这里,关于springboot如何获取websocket的header头信息的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • websocket如何在header中携带token参数

    前端部分 后端接口过滤校验部分

    2024年02月03日
    浏览(40)
  • Java21 + SpringBoot3使用Spring Security时如何在子线程中获取到认证信息

    目录 前言 原因分析 解决方案 方案1:手动设置线程中的认证信息 方案2:使用 DelegatingSecurityContextRunnable 创建线程 方案3:修改 Spring Security 安全策略 通过设置JVM参数修改安全策略 通过 SecurityContextHolder 修改安全策略 总结 近日心血来潮想做一个开源项目,目标是做一款可以适

    2024年02月19日
    浏览(38)
  • SpringBoot集成WebSocket,实现后台向前端推送信息

    在一次项目开发中,使用到了Netty网络应用框架,以及MQTT进行消息数据的收发,这其中需要后台来将获取到的消息主动推送给前端,于是就使用到了MQTT,特此记录一下。 WebSocket协议是基于TCP的一种新的网络协议。它实现了客户端与服务器全双工通信,学过计算机网络都知道

    2024年01月16日
    浏览(48)
  • 【Java】SpringBoot快速整合WebSocket实现客户端服务端相互推送信息

    目录 什么是webSocket? webSocket可以用来做什么? WebSocket操作类 一:测试客户端向服务端推送消息 1.启动SpringBoot项目 2.打开网站 3.进行测试消息推送 4.后端进行查看测试结果 二:测试服务端向客户端推送消息 1.接口代码 2.使用postman进行调用 3.查看测试结果         WebSocke

    2024年01月20日
    浏览(62)
  • springboot获取登录用户的个人信息

    在Spring Boot中,获取登录用户的个人信息通常需要使用Spring Security框架来进行身份认证和授权。Spring Security提供了一个名为SecurityContextHolder的上下文对象,它包含了当前请求的身份认证信息。通过SecurityContextHolder,可以访问当前已认证的用户的信息。 当使用 Spring Boot + Spring

    2023年04月19日
    浏览(76)
  • Selenium中如何抓取网络请求响应及WebSocket信息

    目录 获取Chrome性能日志 获取请求及响应信息 我们在使用Selenium测试Web或Electronjs/Cef框架应用时,有时候操作一个元素需要判断是否发送了请求以及请求的参数是否正确 我们可以通过,开启Chrome的性能日志来然后配合driver.get_log(\\\"performance\\\")来查看请求,然后对Network相关的日子

    2024年02月07日
    浏览(38)
  • python自定义websocket包headers请求头

    有一种反爬手段“检测headers请求头中字段的排序”,websocket方式发请求也不例外。 python实现websocket连接,可以使用py包websocket-client 安装 使用  请求测试默认会添加请求头  如何修改并固定排序规则,重写get_handshake_headers函数 测试 大功告成! 

    2024年02月12日
    浏览(36)
  • Selenium自动化测试中如何抓取网络请求响应及WebSocket信息

    我们在使用Selenium测试Web或Electronjs/Cef框架应用时,有时候操作一个元素需要判断是否发送了请求以及请求的参数是否正确 我们可以通过,开启Chrome的性能日志来然后配合driver.get_log(\\\"performance\\\")来查看请求,然后对Network相关的日子进行过滤, 实现如下: 运行结果如下: 由于日

    2024年02月16日
    浏览(57)
  • Spring boot Websocket 添加授权校验(校验Header)

            最近需要用到websocket,并且确认是在登录成功的情况下才能连接,看了下,websocket 5.8以上已经支持校验了,但是由于我项目是spring boot 2.7.9,为了兼容,只能考虑通过在websocket 的header中带上验证信息,进行校验,详细如下 1.首先往spring boot pom 内加入 websocket的依赖

    2024年02月07日
    浏览(32)
  • Springboot通过请求头获取当前用户信息的一种方式

    一、实现原理 1、token的存储 当用户登录时,将token, userInfo存入redis缓存中,以便鉴权与获取用户信息。 2、发送请求 每次发送请求时将token放入请求头中,令key为“Authorization”或其他值。 3、获取请求头部 4、用户请求头部携带的token在redis中获得userInfo 二、导入依赖 1、redi

    2024年02月05日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包