以注解的形式限制接口的訪問

首先聲明此方案與并發(fā)沒有關(guān)系,所以下文或者截圖中涉及到的并發(fā)一詞都是不合理的

這種控制其實(shí)不嚴(yán)格,比如針對多臺服務(wù)器就不是你想的那樣

此方案是用來限制接口訪問的數(shù),只是處于保護(hù)服務(wù)器,減少數(shù)據(jù)庫壓力


背景:項(xiàng)目中有一個按二級大類批量更改配置的操作,但是還不能直接以update的形式進(jìn)行更改,必須先假刪除,再insert,并且在刪除之前有一個select,對查出來的數(shù)據(jù)進(jìn)行遍歷。

導(dǎo)致的問題:事務(wù)時間長,會出現(xiàn)dubbo超時,導(dǎo)致數(shù)據(jù)庫完成更新,前端顯示系統(tǒng)異常,給用戶一個操作失敗的錯覺

解決方案:異步操作數(shù)據(jù)庫,直接給前端返回,以犧牲結(jié)果正確性保證,來換取一個友好的交互。

此方案還是有一個問題,當(dāng)數(shù)據(jù)庫還未更新完成時,用戶查詢時查不到最新修改的,導(dǎo)致用戶以為更新失敗再次更改,無形中增加了不必要的重復(fù)更新操作

解決方案:給哪些有上述問題的接口添加一個訪問次數(shù)限制控制,比如此接口一分鐘之內(nèi)只允許更改一次,此方案并不能保證用戶的每一次操作,數(shù)據(jù)庫都會成功更新,只是對這種批量的操作設(shè)置得更人性化一點(diǎn),只是在保護(hù)服務(wù)器


以下給出代碼:

一:基礎(chǔ)類的創(chuàng)建

1、創(chuàng)建使用在Controller類上的注解


2、創(chuàng)建使用在方法上的注解(前提是該方法所在的類使用了步驟一中的注解)

3、創(chuàng)建每個控制點(diǎn)的實(shí)體類(紅框部分大家可以思考一下為什么要重寫)

4、創(chuàng)建一個被禁止訪問的一個友好提示,這里建了一個實(shí)體類


以上完成了一些基本的類和注解的創(chuàng)建,接下來就是如何去實(shí)現(xiàn)了

二、業(yè)務(wù)實(shí)現(xiàn)

1、思路分析,既然是對每個接口的訪問,那我們就要考慮如何把控制權(quán)放在接口的上層(具體哪一層可以根據(jù)項(xiàng)目擇優(yōu)選擇),因?yàn)閏ontroller的上層肯定知道本次請求要訪問哪個handler(既,哪個接口),我在項(xiàng)目中把控制權(quán)放在了攔截器層面

2、以下列出我的業(yè)務(wù)實(shí)現(xiàn)

攔截器的實(shí)現(xiàn),方法里第一步可以先判斷一下map的長度是否大于零,你懂的,這里就不改了

setApplicationContext方法的實(shí)現(xiàn)

攔截器工具類的方法有兩個

最后配置一下攔截器到配置文件里,? <mvc:interceptors></mvc:interceptors>里可以配置多個攔截器


注意事項(xiàng):

1、控制點(diǎn)事控制接口的訪問的,不是控制按鈕點(diǎn)擊的,所以要注意一些情況,比如:你對一個修改和一個查詢做了并發(fā)控制,但是通常修改完后會自定調(diào)取查詢接口,所以要注意隱藏的一些調(diào)用

2、注意攔截器的執(zhí)行順序

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容