千家信息网

spring WebSocket入口以及拦截器的实现方法

发表于:2025-11-07 作者:千家信息网编辑
千家信息网最后更新 2025年11月07日,这篇文章主要介绍"spring WebSocket入口以及拦截器的实现方法",在日常操作中,相信很多人在spring WebSocket入口以及拦截器的实现方法问题上存在疑惑,小编查阅了各式资料,整理
千家信息网最后更新 2025年11月07日spring WebSocket入口以及拦截器的实现方法

这篇文章主要介绍"spring WebSocket入口以及拦截器的实现方法",在日常操作中,相信很多人在spring WebSocket入口以及拦截器的实现方法问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"spring WebSocket入口以及拦截器的实现方法"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

+

一、POM依赖

POM依赖,spring4.1.4.RELEASE,spring核心依赖请自行添加,下面是websocket相关jar

    javax.websocket    javax.websocket-api    1.0    provided    org.springframework    spring-websocket    4.1.4.RELEASE

二、WebSocket入口

@Configuration@EnableWebMvc@EnableWebSocketpublic class WebSocketConfig extends WebMvcConfigurerAdapter implements WebSocketConfigurer {    @Override    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {        //允许连接的域,只能以http或https开头        String[] allowsOrigins = {"http://www.xxx.com"};               //WebIM WebSocket通道        registry.addHandler(chatWebSocketHandler(),"/           webSocketIMServer").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor());        registry.addHandler(chatWebSocketHandler(), "/sockjs/w          ebSocketIMServer").setAllowedOrigins(allowsOrigins).addInterceptors(myInterceptor()).withSockJS();    }    @Bean    public ChatWebSocketHandler chatWebSocketHandler() {        return new ChatWebSocketHandler();    }    @Bean    public WebSocketHandshakeInterceptor myInterceptor(){        return new WebSocketHandshakeInterceptor();    }}
  1. 实现WebSocketConfigurer接口,重写registerWebSocketHandlers方法,这是一个核心实现方法,配置websocket入口,允许访问的域、注册Handler、SockJs支持和拦截器。

  2. registry.addHandler注册和路由的功能,当客户端发起websocket连接,把/path交给对应的handler处理,而不实现具体的业务逻辑,可以理解为收集和任务分发中心。

  3. setAllowedOrigins(String[] domains),允许指定的域名或IP(含端口号)建立长连接,如果只允许自家域名访问,这里轻松设置。如果不限时使用"*"号,如果指定了域名,则必须要以http或https开头。

  4. addInterceptors,顾名思义就是为handler添加拦截器,可以在调用handler前后加入我们自己的逻辑代码。

  5. spring websocket也支持STOMP协议,下回再分享。

三、拦截器实现

public class WebSocketHandshakeInterceptor implements HandshakeInterceptor {    @Override    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Map attributes) throws Exception {        if (request instanceof ServletServerHttpRequest) {            attributes.put("username",userName);        }        return true;    }    @Override    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler, Exception exception) {    }}

beforeHandshake,在调用handler前处理方法。常用在注册用户信息,绑定WebSocketSession,在handler里根据用户信息获取WebSocketSession发送消息。

四、Handler处理类

public class ChatWebSocketHandler extends TextWebSocketHandler{        private final static List sessions = Collections.synchronizedList(new ArrayList());    //接收文本消息,并发送出去    @Override    protected void handleTextMessage(WebSocketSession session, TextMessage message) throws Exception {        chatTextMessageHandler(message.getPayload());        super.handleTextMessage(session, message);    }    //连接建立后处理    @SuppressWarnings("unchecked")    @Override    public void afterConnectionEstablished(WebSocketSession session) throws Exception {        logger.debug("connect to the websocket chat success......");        sessions.add(session);        //处理离线消息    }    //抛出异常时处理    @Override    public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {        if(session.isOpen()){            session.close();        }        logger.debug("websocket chat connection closed......");        sessions.remove(session);    }    //连接关闭后处理    @Override    public void afterConnectionClosed(WebSocketSession session, CloseStatus closeStatus) throws Exception {        logger.debug("websocket chat connection closed......");        sessions.remove(session);    }    @Override    public boolean supportsPartialMessages() {        return false;    }}

五、客户端连接

var host = _window.location.host;var websocket;if ('WebSocket' in window) {    websocket = new ReconnectingWebSocket("ws://"        + host + "/webSocketIMServer", null, {debug:true, maxReconnectAttempts:4});} else if ('MozWebSocket' in window) {    websocket = new MozWebSocket("ws://" + host        + "/webSocketIMServer");} else {    websocket = new SockJS("http://" + host            + "/sockjs/webSocketIMServer");}websocket.onopen = function(evnt) {    console.log("websocket连接上");};websocket.onmessage = function(evnt) {    messageHandler(evnt.data);};websocket.onerror = function(evnt) {    console.log("websocket错误");};websocket.onclose = function(evnt) {    console.log("websocket关闭");}

这里用到了ReconnectingWebSocket.js,对浏览器自带websocket添加了扩展,例如重连,连接超时时间,失败重连间隔,尝试连接最大次数等。

到此,关于"spring WebSocket入口以及拦截器的实现方法"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

方法 拦截器 入口 处理 学习 域名 消息 信息 客户 客户端 开头 更多 核心 用户 逻辑 帮助 支持 实用 顾名思义 接下来 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 深圳市呼市网络技术有限公司 集思网络安全知识 计算机网络技术课程名词解释 关于宣传网络安全的ppt 检测站网络安全员试题 党史与网络安全 数据库建唯一 js修改json服务器文件 恒大网络安全 数据库如何画 福建公安厅网络安全专家 网络安全素质教育学习手抄报 昭阳网络技术服务 我的世界服务器违规去哪举报 网络安全看不懂是指什么 莆田公司app软件开发 sql数据库语法问题 郎溪多功能软件开发服务维修价格 武软计算机网络技术专业怎么样 重庆科技学院网络技术就业怎么样 服务器文件私服搭建 以下程序按下面指定的数据库 新员工培训软件开发方案 北京易特优网络技术有限公司 腾讯云服务器怎么删除登陆设备 网络安全中的拖库 管理员界面打开数据库 做vr软件开发需要掌握什么 蚌埠互联网科技园到新二中路线 监管科技 互联网金融
0