SSM整合 - WebSocket

本文介绍了如何在Spring框架中配置WebSocket依赖,添加处理器映射和拦截器,处理WebSocket握手和消息传递,以及解决跨域问题。详细步骤包括引入依赖、配置WebSocket处理器、创建拦截器以验证用户登录等。


今日内容

  • ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼

    ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨


学习目标

  • ⑴ ⑵ ⑶ ⑷ ⑸ ⑹ ⑺ ⑻ ⑼ ⑽

    ⑾ ⑿ ⒀ ⒁ ⒂ ⒃ ⒄ ⒅ ⒆ ⒇

    ① ② ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨


一、引入依赖

建议!!和自己的Spring一个版本

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-websocket</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-messaging</artifactId>
    <version>5.1.5.RELEASE</version>
</dependency>

二、添加WebSocket处理器映射及拦截器

配置访问地址和处理器的映射拦截器

注意!!! 一定要加上"setAllowedOrigins()"解决跨域问题!! 否则使用工具能连上, 使用浏览器就连不上!!!

@Component
@EnableWebSocket
public class WebSocketConfiguration implements WebSocketConfigurer {
   
   

    @Resource
    private ModelSessionWebSocketHandler handler;

    /**
     * 配置WebSocket链接地址
     * @param registry
     */
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
   
   
        // 浏览器支持websocket
        registry.addHandler(handler, "/modelSession")
        		.setAllowedOrigins("*")
        		.addInterceptors(new ModelSessionInterceptor());
        // 浏览器不支持的话,需要SocketJs引入支持
//        registry.addHandler(handler, "/modelSession/sockjs")
//				.setAllowedOrigins("*")
//				.addInterceptors(new ModelSessionInterceptor()).withSockJS();
    }
}

这个类的作用是配置WebSocket的链接地址,分为浏览器支持WebSocket和不支持WebSocket的情况,不支持可以引入sockjs(某些环境下使用这行代码会导致无法连接,不放心可以删去)

WebSocket连接地址是: ws://ip:端口号/项目名称/modelSession

WebSocket可以通过URL传参: "ws://ip:端口号/项目名称/modelSession?userId="+userId


三、创建拦截器

public class ModelSessionInterceptor implements HandshakeInterceptor {
   
   

    protected static Logger logger = LoggerFactory.getLogger(ModelSessionInterceptor.class);

    private static SaasLoginService saasLoginService = SpringContextHolder.getBean(SaasLoginService.class);

    public final static String HEADER_DEV_LOGIN_NAME = "dev-login-name";
    public final static String HEADER_CLIENT_ID = "pro-client-id";
    public final static String HEADER_ACCESS_TOKEN = "pro-access-token";
    public final static String HEADER_ACCESS_SECRET_KEY = "pro-access-secret-key";

    // 前置操作
    @Override
    public boolean beforeHandshake(ServerHttpRequest request,
                                   ServerHttpResponse response,
                                   WebSocketHandler wsHandler,
                                   Map<String, Object> attributes) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值