千家信息网

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

发表于:2025-02-21 作者:千家信息网编辑
千家信息网最后更新 2025年02月21日,这篇文章主要介绍"spring WebSocket入口以及拦截器的实现方法",在日常操作中,相信很多人在spring WebSocket入口以及拦截器的实现方法问题上存在疑惑,小编查阅了各式资料,整理
千家信息网最后更新 2025年02月21日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安全错误 数据库的锁怎样保障安全 苹果如何安装神奇宝贝服务器 旅行青蛙软件开发的初衷 力控科技互联网怎么解决 修改数据库路径 北京银行软件开发 幻塔无法连接服务器什么原因 想做个出入库的数据库怎么做 上海管理平台软件开发 网络安全有奖征集 广州眼部整形医生数据库 手机天气预报连接更新服务器 svn服务器搭建 mac 猎头公司软件开发招聘 农金通连接服务器失败什么原因 常熟网络安全宣传视频 服务器虚拟机系统安装教程图解 数据库中的按位左移运算符 软件开发工具lae 云端大数据协调处理软件开发 战神遗迹服务器未响应 网络安全关键岗位职责 安徽合肥dns服务器地址云空间 浪潮服务器和交换机 sql数据库安装引擎失败 普洱市网络安全检查 数据库如何加密更安全 网络安全课扫黄打非视频 宁夏物联网守时模块服务器 计算机网络技术的高级证书 东软网络安全工程
0