【Spring Boot 二十】聊聊Spring Boot 之 Websocket

  • 内容
  • 评论
  • 相关

什么是WebSocket

WebSocket为浏览器和服务器之间提供了双工异步通信功能,也就是说我们可以利用浏览器给服务器发送消息,服务器也可以给浏览器发送消息,目前主流浏览器的主流版本对WebSocket的支持都算是比较好的,但是在实际开发中使用WebSocket工作量会略大,而且增加了浏览器的兼容问题,这种时候我们更多的是使用WebSocket的一个子协议stomp,利用它来快速实现我们的功能。OK,关于WebSocket我这里就不再多说,我们主要看如何使用,如果小伙伴们有兴趣可以查看这个回答来了解更多关于WebSocket的信息WebSocket 是什么原理?为什么可以实现持久连接。

 

开始

1、导包

springboot的高级组件会自动引用基础的组件,像spring-boot-starter-websocket就引入了spring-boot-starter-web和spring-boot-starter,避免重复导入包~

 

 

2、新建包

com.spring.boot.websocket

 

3、新建类:WebSocketHandle.java、WebSocketConfig.java

 

 

4、新建一个测试websocket的页面,放到resources/static下面:index.html

 

然后就可以通过http://localhost:8090/boot/index.html访问了。

 

5、访问控制

此时,默认所有人都可以通过websocket连接,如果想控制访问权限,可以在shiro的配置文件拦截器加入

filterChainDefinitionMap.put("/websocket/**", "anon");

如果不加上面这句话,那么shiro会拦截websocket请求,返回未登录的信息。

 

6、websocket Session 转换 shiro Session

websocket的session和web容器的session是不同的session

websocket的session是:javax.websocket.Session

web容器我使用的Session是shiro,故:org.apache.shiro.session.Session

 

6.1创建类GetHttpSessionConfigurator.java

6.2WebSocketHandle类的ServerEndpoint注解修改如下

ServerEndpoint@ServerEndpoint(value = "/websocket",configurator=GetHttpSessionConfigurator.class)

 

6.3在WebSocketHandle中获得并使用httpSession

 

在onOpen打开连接的时候通过传入EndpointConfig

HttpSession httpSession = (HttpSession) config.getUserProperties().get(HttpSession.class.getName());获得httpSession

 

然后将httpSession存入websocket Session中

session.getUserProperties().put(Const.HTTP_SESSION, httpSession);

 

若在onClose()、onMessage()业务用到httpSession,可以传入websocket Session,通过websocket Session获得httpSession

HttpSession httpSession = (HttpSession) session.getUserProperties().get(Const.HTTP_SESSION);

 

 

 

 

 

 

 

人生的数据,需要自己一步一步的努力计算

喜欢 3

评论

0条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Title - Artist
0:00