在編寫介面api時,基於資料安全的考慮,我們通常會在介面進行許可權校驗,有許可權的才可以查詢資料,沒有許可權我們可以丟擲異常「沒有許可權,禁止訪問「。通常,我們實現是這樣的:
@apioperation("根據id查詢使用者資訊")
public baseresponsegetdata(@pathvariable string id)
咋一看,介面**不多,邏輯也不是很複雜,這樣寫也沒有什麼問題。但是你想一下,當有幾十上百個介面都要進行鑑權時,那麼這些**加起來,就不少了;而且一旦鑑權的邏輯發生改變,那麼那些使用過的地方都需要做修改,這就不能讓人接受了。
實際上,我們會發現,這個介面分為兩部分,一部分是鑑權,一部分是獲取資料,只有鑑權通過,才可以獲取資料。這種場景就很適合使用aop來織入鑑權的功能。下面我們來展示優化後的**:
首先,我們定義乙個(許可權)註解:
@target(elementtype.method)
@retention(retentionpolicy.runtime)
@documented
public @inte***ce demo ;
}
配置切面:
@aspect
@component
public class demologgingaspect
private void validateuserpermission(listpermissions)
// 獲取使用者許可權
listuserpermissions = getuserpermission();
// 校驗許可權
if (!userpermissions.containsall(permissions))
} private listgetuserpermission()
}
然後需要鑑權的介面加上demo這個註解,就可以實現鑑權了
@demo(value = )
@apioperation("根據id查詢使用者資訊")
public baseresponsegetdata(@pathvariable string id)
當然了,aop裡面的其他四種通知型別(返回通知 (@afterreturning) 、異常通知 (@afterthrowing) 、 後置通知 (@after) 、環繞通知 (@around)),感興趣的可以自己去了解。 AOP 自定義註解
compile org.springframework.boot spring boot starter aop aspect component public class auditaspect before weblog public void debefore joinpoint joinpo...
自定義註解AOP
專案中有些模組需要加入工作流審批流程,並且可以選擇是否開啟工作流。於是根據需求就想到了用aop做乙個通用的模組開關檢驗。如果模組沒有開啟工作流,就直接放行。如果開啟了工作流,就啟動該模組的工作流流程。下面上 target elementtype.method retention retentionp...
SpringBoot 結合AOP使用自定義註解
最近使用springboot在做乙個需求的時候,使用到了aop 面向切面程式設計 spring的aop一直都是spring宣傳的一大特性,其實也沒多高大上,就是使用jdk或者aspectj做的動態 這個需求是做乙個審計日誌,使用aop是最最合適不過了,使用aop不用耦合在業務 裡,可擴充套件性好,但...