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

WebSocket在spring messagemapping下获取httpsession

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

需要添加依赖:
    <dependency>
    <groupId>org.springframework.session</groupId>
            <artifactId>spring-session-data-redis</artifactId>
            <version>1.3.1.RELEASE</version>
            <type>pom</type>
        </dependency>

新建interceptor类:
@Component
public class MyHandshakeInterceptor extends HttpSessionHandshakeInterceptor {

    @Override
    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler handler,
            Map map) throws Exception {
        if (request instanceof ServletServerHttpRequest) {
            ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
            HttpSession session = servletRequest.getServletRequest().getSession(false);
            if (session != null) {
                System.out.println("ok");
                // User u = (User) session.getAttribute("U");
                // map.put("username", u.getName());
            }
        }
        System.out.println("beforeHandshake");
        return true;
    }

    @Override
    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
            Exception ex) {
    }
}

在config中配置interceptor对象:
@Configuration
@EnableScheduling
@EnableWebSocketMessageBroker
public class WebSocketConfig extends AbstractSessionWebSocketMessageBrokerConfigurer<ExpiringSession>{
    @Override    
    public void configureStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/sockets").addInterceptors(new MyHandshakeInterceptor()).withSockJS();
    }
    
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }
}

新建SessionRepository实现类
public class MySessionBean implements SessionRepository<Session>{

    @Override
    public Session createSession() {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void save(Session session) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public Session getSession(String id) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void delete(String id) {
        // TODO Auto-generated method stub
        
    }
}

启动类中新增bean依赖:
@Bean
    public MySessionBean mySessionBean(){
        return new MySessionBean();
    }

    public static void main(String[] args) {
        SpringApplication.run(SampleTomcatWebSocketApplication.class, args);
    }

转载于:https://my.oschina.net/ffse54s/blog/1490452

相关文章:

  • 图片的动画 ease.js
  • [翻译].net 2.0(c#)下简单的FTP应用程序(转)
  • Python Unicode 转换 字符串
  • java中关于、、|、||之间的区别和运算
  • 生成静态页面的方法
  • 项目质量量化考核建议
  • Linux命令(磁盘的卸载与挂载)
  • 手势识别论文解读
  • 用于在弹出窗口中计算窗口位置的函数
  • 《领域特定语言》一2.2为何需要DSL
  • 关注数据中心NFV性能
  • 取页面内各种尽寸数据。备档
  • Kotlin和Java EE系列之—— 如何让Kotlin类对Java EE友好
  • 多个项目共享一个app.config 的解决办法
  • 程序员每周编程80+小时 健康如何保证
  • 【Leetcode】101. 对称二叉树
  • [nginx文档翻译系列] 控制nginx
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • CSS 专业技巧
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • Perseus-BERT——业内性能极致优化的BERT训练方案
  • React+TypeScript入门
  • React系列之 Redux 架构模式
  • V4L2视频输入框架概述
  • vuex 笔记整理
  • 简析gRPC client 连接管理
  • 前端学习笔记之观察者模式
  • 数组大概知多少
  • 职业生涯 一个六年开发经验的女程序员的心声。
  • ​520就是要宠粉,你的心头书我买单
  • ​Distil-Whisper:比Whisper快6倍,体积小50%的语音识别模型
  • ​软考-高级-信息系统项目管理师教程 第四版【第14章-项目沟通管理-思维导图】​
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • $NOIp2018$劝退记
  • (C语言)二分查找 超详细
  • (java版)排序算法----【冒泡,选择,插入,希尔,快速排序,归并排序,基数排序】超详细~~
  • (NO.00004)iOS实现打砖块游戏(九):游戏中小球与反弹棒的碰撞
  • (阿里云万网)-域名注册购买实名流程
  • (笔试题)分解质因式
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (三分钟)速览传统边缘检测算子
  • (四)docker:为mysql和java jar运行环境创建同一网络,容器互联
  • (一)WLAN定义和基本架构转
  • (转)fock函数详解
  • (转)关于pipe()的详细解析
  • (轉貼) 資訊相關科系畢業的學生,未來會是什麼樣子?(Misc)
  • .FileZilla的使用和主动模式被动模式介绍
  • .helper勒索病毒的最新威胁:如何恢复您的数据?
  • .Net Memory Profiler的使用举例
  • .NET Windows:删除文件夹后立即判断,有可能依然存在
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net 设置默认首页
  • .NET 中选择合适的文件打开模式(CreateNew, Create, Open, OpenOrCreate, Truncate, Append)
  • .NET上SQLite的连接
  • []常用AT命令解释()