最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

基于SpringBoot的websocket連接訪問(wèn)控制方案

2021-10-24 12:54 作者:向上生長(zhǎng)之路  | 我要投稿

之前的文章中已經(jīng)介紹過(guò)SpringBoot整合websocket的基本使用

在實(shí)際生產(chǎn)環(huán)境中,我們的websocket服務(wù)器一般兒都會(huì)設(shè)置一定的安全訪問(wèn)控制策略,不會(huì)允許客戶端不經(jīng)過(guò)認(rèn)證就能同服務(wù)器進(jìn)行通信服務(wù),接下來(lái)給大家介紹下,通過(guò)在websocket建立握手階段,驗(yàn)證客戶端的相關(guān)憑證信息用以檢測(cè)客戶端身份的合法性,來(lái)實(shí)現(xiàn)服務(wù)器端的安全訪問(wèn)控制~

  • SpringBoot版本 2.4.5

工作原理

Spring為我們提供了HandshakeInterceptor握手?jǐn)r截器



查看源碼可以看到HandshakeInterceptor中提供了beforeHandshakeafterHandshake兩個(gè)方法,它作用在websocket建立連接握手前后階段,通過(guò)在beforeHandshake方法中返回的布爾值,能決定是否允許建立websocket連接,基于此,我們就能實(shí)現(xiàn)服務(wù)器的安全訪問(wèn)控制了

使用方式

修改registerWebSocketHandlers配置,增加HandshakeInterceptor攔截器實(shí)現(xiàn)類,來(lái)實(shí)現(xiàn)自定義的攔截策略



詳細(xì)代碼參考:https://github.com/netbuffer/spring-boot-websocket-demo/blob/master/src/main/java/cn/netbuffer/springboot/websocket/demo/interceptor/RbacHandshakeInterceptor.java

攔截方案一 基于cookie的攔截策略

編寫(xiě)基于cookie的攔截方法,從cookie中解析出訪問(wèn)憑證信息token值,實(shí)際的token值應(yīng)該基于用戶輸入的相關(guān)訪問(wèn)口令來(lái)簽發(fā)生成的,要結(jié)合所用的shiro、spring security、sa-token等安全認(rèn)證框架來(lái)綜合考慮~,token值是經(jīng)過(guò)安全算法生成的,不能被偽造,可以使用jwt(json web token)來(lái)承載



編寫(xiě)前端測(cè)試代碼同服務(wù)器進(jìn)行通信
詳細(xì)代碼參考:https://github.com/netbuffer/UItest/blob/master/websocket/index.html
第一次訪問(wèn)沒(méi)有攜帶cookie中的token值,結(jié)果會(huì)被服務(wù)器拒絕連接



通過(guò)在開(kāi)發(fā)者工具中注入cookie,設(shè)置token信息



再次訪問(wèn)前端測(cè)試頁(yè)面,觀察服務(wù)器日志輸出,可以看到從cookie中解析出了token值,我們就可以根據(jù)token信息來(lái)驗(yàn)證訪問(wèn)合法性了


攔截方案二 基于querystring的攔截策略

通過(guò)在websocket連接地址中設(shè)置querystring參數(shù),來(lái)驗(yàn)證token值




前端代碼先不帶querystring建立連接訪問(wèn)測(cè)試




觀察服務(wù)器日志,沒(méi)有從querystring中解析出token值,此時(shí)會(huì)拒絕連接



再次修改前端代碼設(shè)置querystring值,訪問(wèn)服務(wù)器測(cè)試,觀察服務(wù)器端日志中已經(jīng)解析到了token值,據(jù)此可以驗(yàn)證訪問(wèn)合法性了



攔截方案三 基于HttpSession的攔截策略

通過(guò)檢測(cè)HttpSession中用戶的登錄態(tài),以及其他相關(guān)的web會(huì)話信息,來(lái)驗(yàn)證合法性;這種方式不適用于前后端分離的項(xiàng)目,受限于有HttpSession會(huì)話才能完成校驗(yàn)



這種方式下,需要在websocket建立連接之前,設(shè)置HttpSession會(huì)話信息,設(shè)置完成后再使用websocket建立連接才可行~


完整測(cè)試工程參考:https://github.com/netbuffer/spring-boot-websocket-demo


基于SpringBoot的websocket連接訪問(wèn)控制方案的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國(guó)家法律
色达县| 托克托县| 安庆市| 行唐县| 珲春市| 江阴市| 东台市| 陈巴尔虎旗| 海林市| 丹阳市| 农安县| 达尔| 沁源县| 青铜峡市| 蚌埠市| 唐海县| 疏勒县| 渝北区| 金堂县| 砚山县| 清镇市| 定安县| 台南县| 石首市| 乐亭县| 龙江县| 会理县| 叙永县| 周口市| 龙胜| 微山县| 兴城市| 合川市| 胶州市| 阿合奇县| 舞阳县| 庄河市| 渑池县| 南昌市| 沙田区| 韶关市|