4 votes

AspectJ - Journalisation de HttpServletRequest

Je veux détourner une requête HTTPServletRequest et enregistrer certaines valeurs à partir de celle-ci en utilisant AspectJ. Cependant, ce qui se retrouve dans le JoinPoint est un objet "RequestFacade". Il ne semble pas y avoir grand chose que je puisse faire avec cet objet. Ma stratégie de journalisation est-elle mauvaise ? Comment puis-je obtenir des informations utiles à partir du HttpServletRequest ? Si je dois le déballer avant d'appeler une méthode, cela va à l'encontre de l'objectif de la POA dans mon application.

J'utilise un serveur Glassfish, si cela fait une différence.

@Before("execution(* Service.testAuditRecord(..))")
public void logBefore(JoinPoint joinPoint) {
    System.out.println("logBefore  --->"  + joinPoint.getSignature().getName());
    System.out.println("logBefore--->Args : " + Arrays.toString(joinPoint.getArgs()));
}

L'enregistrement de RequestFacade

INFO: logBefore  --->testAuditRecord
INFO: logBefore--->Args : [org.apache.catalina.connector.RequestFacade@4dbfa7d0]

3voto

Tomasz Nurkiewicz Points 140462

HttpServletRequest est une interface. Chaque conteneur de servlets a sa propre implémentation. org.apache.catalina.connector.RequestFacade est l'un d'entre eux.

Ceci étant dit, vous êtes libre d'utiliser n'importe laquelle des méthodes suivantes HttpServletRequest sans se soucier de la mise en œuvre effective.

Quelle est la signature de Service.testAuditRecord() ? Est-ce qu'il faut HttpServletRequest comme un argument ? Si oui, AspectJ devrait vous donner une instance fortement typée sans trop de difficultés. Essayez ceci :

@Before("execution(* Service.testAuditRecord(..)) && args(request)")
public void logBefore(JoinPoint joinPoint, HttpServletRequest request) {
  //...

1voto

mskwon Points 63

Utilisez RequestContextHolder comme

HttpServletRequest request = ((ServletRequestAttributes) 
RequestContextHolder.getRequestAttributes()).getRequest();

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X