私のURLにパス変数の名前を付けた方法で、私のポイントカットをトリガしたいと思います。Spring AOP、パス変数名に基づいてトリガされたポイントカット
実際には文字列であり、すべての文字列でポイントカットをトリガーしたくありません。
public ResponseEntity<ApiKeyDTO> createApiKey(@PathVariable("name") String datasetName, @RequestBody ApiKeyDTO apiKeyDTO)
しかし、また、ここで(私はしたくないもの)トリガされている:私の場合は
@Pointcut("@annotation(security.annotation.RequireValidUser) && args(datasetName, ..)")
private void methodAnnotatedForValidDatasetName(String datasetName) {
}
このポイントカットに成功(OKです)この方法でトリガされ
public ResponseEntity<List<ApiKeyDTO>> findApiKeyFromDatasetLabel(@PathVariable("label") String datasetLabel)
私には回避策があるので、pointcutは異なる文字列とその名前を区別できますか?
EDIT:@kuhajeyanによって示唆されるように、私は次のように「argNames」を使用してみました:intentedとして残念ながら、それは動作しません
@Pointcut(value = "@annotation(security.annotation.RequireValidUser) && args(datasetName, ..)", argNames = "datasetName")
、それだけでポイントカット内部の引数の名前を指定します。
を使用することができますあなたは、パラメータ名に一致する必要はありません! - 彼らはの一部ではないとして - **悪い考え** API契約と純粋にソースコードは通常バイトコードでは利用できず、しばしば変更の対象となります。契約がメソッドシグネチャです。したがって、メソッドの戻り値の型、パラメータの番号、型と順序、メソッドの注釈、パラメータの注釈など、シグネチャに基づいてポイントカットを区別する必要があります。 – kriegaex
あなたは良い点を作ったと思います。私は私のエンドポイントを設計する方法を再考する必要があります。ありがとうございました。 – Rlarroque