前言

一直想开发一个功能比较强大的项目,但是一直没有动手,最近终于有点时间来折腾它了。由于时隔两年没有接触前端了,所以需要一个小项目先练练手感。等这个项目完工之后在着手搞一个大工程。都说好记星不如烂笔头,现在就将这一个过程记录下来,万一有什么踩坑的地方,也可以提示后来人。

主要需要配合前端一起使用

代码逻辑

package org.mjdai.server.config;/*** WebSocket 配置类 - 实时聊天*/import org.apache.commons.lang3.StringUtils;
import org.mjdai.server.config.security.component.JwtTokenUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.messaging.Message;
import org.springframework.messaging.MessageChannel;
import org.springframework.messaging.simp.config.ChannelRegistration;
import org.springframework.messaging.simp.config.MessageBrokerRegistry;
import org.springframework.messaging.simp.stomp.StompCommand;
import org.springframework.messaging.simp.stomp.StompHeaderAccessor;
import org.springframework.messaging.support.ChannelInterceptor;
import org.springframework.messaging.support.MessageHeaderAccessor;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.core.userdetails.UserDetailsService;
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 {@Value("${jwt.tokenHead}")private String tokenHead;@Autowiredprivate JwtTokenUtil jwtTokenUtil;@Autowiredprivate UserDetailsService userDetailsService;/*** 添加这个 Endpoint, 这样的网页可以通过 websocket 连接上服务* 也就是我们配置 websocket 的服务地址,并且可以指定是否使用 socketJS** @param registry*/@Overridepublic void registerStompEndpoints(StompEndpointRegistry registry) {/*** 1. 将 ws/ep 路径注册为 stomp 的端点,用户连接了这个端点就可以进行 websocket 通讯,支持 socketJS* 2. setAllowedOrigins("*"):允许跨域* 3.支持withSockJS访问*/registry.addEndpoint("/ws/ep").setAllowedOrigins("*").withSockJS();}/*** 获取 JWT 令牌,作相应处理,不然会被 jwt 拦截器拦截掉* 输入通道参数配置* @param registration*/@Overridepublic void configureClientInboundChannel(ChannelRegistration registration) {registration.interceptors(new ChannelInterceptor() {@Override // 预发送public Message<?> preSend(Message<?> message, MessageChannel channel) {StompHeaderAccessor accessor = MessageHeaderAccessor.getAccessor(message, StompHeaderAccessor.class);// 判断是否为连接,如果是,需要获取 token ,并且设置用户对象if (StompCommand.CONNECT.equals(accessor.getCommand())) {// 令牌String token = accessor.getFirstNativeHeader("Auth-Token");// 前端定义的参数 Auth-Tokenif (!StringUtils.isEmpty(token)) {String authToken = token.substring(tokenHead.length());// 从 token 中获取用户名String username = jwtTokenUtil.getUserNameFromToken(authToken);// token 中存在用户名if (!StringUtils.isEmpty(username)) {// 登录UserDetails userDetails = userDetailsService.loadUserByUsername(username);// 验证 token 是否有效,重新设置用户对象if (jwtTokenUtil.validateToken(authToken, userDetails)) {UsernamePasswordAuthenticationToken authenticationToken = new UsernamePasswordAuthenticationToken(userDetails, null, userDetails.getAuthorities());SecurityContextHolder.getContext().setAuthentication(authenticationToken);accessor.setUser(authenticationToken);}}}}return message;}});}/*** 配置消息代理** @param registry*/@Overridepublic void configureMessageBroker(MessageBrokerRegistry registry) {// 配置代理域,可以配置多个,配置代理目的地前缀为/queue,可以在配置域上向客户端推送消息registry.enableSimpleBroker("/queue");}
}

websocket后台逻辑相关推荐

  1. 百度新闻后台逻辑流程分析

    /*版权声明:可以任意转载,转载时请务必标明文章原始出处和作者信息 .*/ 百度新闻后台逻辑流程分析 CopyMiddle:张俊林 TimeStamp:2008年1月9日 今天分析了一下百度新闻,琢磨 ...

  2. fanuc机器人提示暂停_FANUC机器人学习——后台逻辑功能

    FANUC后台逻辑简介 FANUC机器人的后台逻辑功能有点类似于PLC,当我们使用后台逻辑的时候,可以在后台执行只包含对应后台逻辑的指令的TP程序.程序从最初到最后被反复执行.该执行不受急停.暂停.报 ...

  3. OA系统二十四:请假审批五:【点击“审批”后的审批弹出框】的后台逻辑;(审批结果提交的Dao层和Service层逻辑)

    本篇博客的主要内容是:[请假审批内嵌页面],[审批弹出框]的点击"确认提交"后,后台的逻辑:主要是Dao层和Service层这些后台逻辑:  说明: (1)目前来看,为了实现某个功 ...

  4. 搭建webassembly网页播放器(六)---websocket后台服务程序

    这里我们主要介绍后台搭建技术,前端搭建好后,需要后端配置展现,实现的效果就是 :网页连接上我们的 websocket服务后,我们就从H264文件中不断的提取出H264帧,然后传递给前端,前端调用web ...

  5. websocket后台推送数据

    介绍 现在很多网站为了实现即时通讯,所用的技术都是轮询(polling).轮询是在特定的的时间间隔(如每1秒), 由浏览器对服务器发出HTTP request,然后由服务器返回最新的数据给客服端的浏览 ...

  6. html中编辑广告位,广告位(banner)的可视化管理后台逻辑说明

    针对APP端的banner展示,怎样做到前后端的有机组合,方便运营人员自行操作(随时更改)广告位呢?本文简单的将可视化banner后台的逻辑做以说明. 百度百科上我们可以看到对banner的定义即&q ...

  7. SAP批次管理先进先出基本后台逻辑

    SAP中标准的批次管理进行先进先出是依据批次特性 "最近收货日期" 的大小来进行推荐批次.所以对批次管理的排序对这部分的了解关系到对SAP中标准批次管理的理解. 先看一下整理逻辑思 ...

  8. redis 实现直播聊天(后台逻辑)

    简单需求:直播的时候用户聊天的需求 后台实现:分为两个接口:发送消息接口和请求消息接口 主要点:redis的mget 的使用, 以及key值的设计 用直播期数[liveNum]作为当前期目前消息的总条 ...

  9. banner panel 页面_广告位(banner)的可视化管理后台逻辑说明

    针对APP端的banner展示,怎样做到前后端的有机组合,方便运营人员自行操作(随时更改)广告位呢?本文简单的将可视化banner后台的逻辑做以说明. 百度百科上我们可以看到对banner的定义即&q ...

最新文章

  1. visual paradigm 表示选择关系_css3选择器用法介绍
  2. flex Scroller
  3. 批量导入导出站点权限site permissions
  4. 29.CSS3边框图片效果
  5. java 反射获取实体类_Java 通过反射给实体类赋值操作
  6. mysql从多个表查询数据类型_MySQL 之 多表查询
  7. keepalived配置高可用集群
  8. leetcode —— 337. 打家劫舍 III
  9. nuget的原理_微服务架构中APIGateway原理
  10. springboot 入门二- 读取配置信息一
  11. 已知3个坐标点xy画圆弧_尺规作图之过一点作已知直线的垂线
  12. Keepalived原理详解
  13. GD32MCU硬件I2C学习(一)
  14. 【Java EE 学习第21天 使用易宝支付接口实现java网上支付功能】
  15. QQ发送PDF为什么显示服务器,为什么QQ接收的PDF文件打不开
  16. JavaScript打点计时器
  17. 创新认知 基于LPC1114单片机的传感器使用
  18. 关于百度文库举报功能的吐槽
  19. (转载)总结一下SQL语句中引号(')、quotedstr()、('')、format()在SQL语句中的用法...
  20. SpringMVC(JSON数据转换,乱码问题)

热门文章

  1. ElementPlus locale 汉化 国际化失效 完美解决
  2. Stitch Fix 融资1200万美元,又一个时尚创业的哈佛女MBA |华丽志
  3. VR虚拟现实游戏长沙VR体验馆哪家好
  4. 新中大SE软件详细年结步骤
  5. 大智慧同花顺Level2行情数据有什么用
  6. 【U8】采购发票的结算按钮是灰色
  7. 2014 第一季度,作为Java程序员的我读过的书
  8. springboot整合P6spy 打印sql语句《二》
  9. CAP, BASE, 最终一致性和五分钟原则
  10. ClickHouse 异常问题记录