2017-09-14 5 views
0

Contexte:

Je développe une application Web avec Spring MVC. Je veux faire un aspect qui est exécuté sur les requêtes POST et non exécuté sur les requêtes GET, car je veux injecter la logique qui empêche les requêtes POST qui sont envoyées avant la fin du rendu HTML.Comment puis-je spécifier la méthode avec une annotation paramétrée et sa valeur avec @Pointcut

@RequestMapping(value = "/aaa", method = RequestMethod.POST) 
public String methodForPost(AnDto dto, Model model) { 
    // the aspect should be executed on this method 
} 

@RequestMapping(value = "/bbb", method = RequestMethod.GET) 
public String methodForGET(AnDto dto, Model model) { 
    // the aspect shouldn't be executed on this method 
} 

Question:

  1. Comment puis-je spécifier la méthode avec une annotation paramétrés et sa valeur avec @Pointcut?
  2. Comment puis-je spécifier la méthode avec une annotation paramétrée et sa valeur dans <aop:pointcut> au printemps applicationContext.xml?

Répondre

1
@Around(value="@annotation(RequestMapping)") 
public Object display(ProceedingJoinPoint joinPoint, RequestMapping requestMapping) throws Throwable { 
    // You have access to requestMapping. From which you can get whether its get or post and decide to proceed or not. 
} 

Plus d'info http://docs.spring.io/spring/docs/current/spring-framework-reference/html/aop.html#aop-ataspectj-advice-params-passing

Vous pourriez avoir à étendre à intercepter uniquement pour ce Requestmapping dans votre forfait. Parce que cela intercepte chaque RequestMappig que vous pourriez avoir dans votre projet, y compris celui utilisé par les bibliothèques que vous pourriez utiliser, ce qui est un fardeau.