我創建一個類來調用審覈我的春天啓動的應用程序的控制器類:Spring AOP和RequestMapping註解
@Aspect
@Component
public class ServiceAudit { //RequestMappingInterceptor {
@Pointcut("@annotation(requestMapping) && execution(* *(..))")
public void controller(RequestMapping requestMapping) {}
@Before("controller(requestMapping)")
public void advice(JoinPoint thisJoinPoint, RequestMapping requestMapping) {
String url = requestMapping.value()[0];
String httpMethod = requestMapping.method()[0].toString();
...
...
我的一個控制器類看起來是這樣的 - 與類和方法級別的註解(其我不能改變在這一點):
RestController
@CrossOrigin
@EnableConfigurationProperties
@RequestMapping(value = "/applications")
public class ApplicationController {
...
...
@RequestMapping(value = "/{id}", method = RequestMethod.GET)
public ResponseEntity<Application> findById(@PathVariable Integer id) throws Exception {
...
...
}
我可以拉的url,methodtype,參數罰款。然而,什麼我有做的是拉控制器類的註釋(‘/應用程序’)的一個非常困難的時間,所以我可以建立我的審計表的完整URL。
我知道還有其他選項審計(比如Spring啓動器),但我需要使用與因各種原因方面的這種做法,我只是堅持在這裏。 Spring的AnnotationUtils似乎很有幫助,但我堅持使用代碼來獲取類級別的註釋。任何人都做過這個?
UPDATE: 感謝。這沒有用。你說得對 - 這是一個多餘的一塊,它的工作時,我刪除了「執行」的一部分,但還是同樣的問題。本質上,問題是如何在這種情況下獲得類級別的註釋。因此,對於我的ApplicationsController類,如何檢索在類級別定義的'/ applications'路徑。我認爲這是在那裏,但它是嵌套在requestMapping對象如此之深,我無法弄清楚如何解壓。現在,唯一的解決辦法我已經是創造我的控制器一個HashMap(ApplicationsController - >「/應用程序」),然後使用methodInvocation.targetClass作爲重點在於地圖。當我添加一個控制器時,不是很優雅,需要維護。
試試,除去執行(* *(..))從點切 – kuhajeyan
感謝。這沒有用。你是對的 - 這是一個多餘的部分,它在我刪除那部分但仍然是同樣的問題時起作用。 – Mike