自定義註解結合AOP實現介面許可權校驗

2021-09-26 22:53:07 字數 1230 閱讀 4122

在編寫介面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不用耦合在業務 裡,可擴充套件性好,但...