4 votes

Garder une trace de ce que font les utilisateurs dans Spring MVC

J'ai une très grosse application écrite en Spring MVC. Je veux conserver un "enregistrement d'activité" qui retrace dans une base de données ce que les utilisateurs font dans mon application.

Dans un premier temps, je veux juste un journal d'activité, cela peut être juste une liste des méthodes du contrôleur qui sont appelées pendant les actions de l'utilisateur, mais plus tard, je voudrais que cette information soit plus "lisible par l'homme", c'est-à-dire qu'au lieu de "modifyAccount(accountId = 5, accountBalance =500) quelque chose comme "l'utilisateur X met à jour le solde du compte 5 à 500".

Le problème que je vois est que, comme mon application est très grande, je ne voudrais pas modifier chacune de mes actions pour ajouter ce mécanisme de journalisation. Existe-t-il un moyen plus souple et plus déclaratif de le faire ?

9voto

Bart Points 7738

Vous pouvez utiliser la programmation orientée aspect (AOP) pour automatiser la journalisation.

http://static.springsource.org/spring/docs/2.0.8/reference/aop.html

Dans la page ci-dessus, vous trouverez de nombreux exemples sur la façon d'utiliser AOP avec Spring. Un exemple est l'utilisation des annotations pour trouver les méthodes qui vous intéressent. L'utilisation de telles annotations est un moyen facile de déterminer quelles méthodes doivent être enregistrées.

L'annotation @Audit

@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Auditable {
    ...
}

La méthode d'audit

@After("@annotation(auditable)", argNames="joinPoint")
public void audit(JoinPoint joinPoint) {
    logger.info("Called {} with arguments {}", 
        joinPoint.getSignature().getLongString(), joinPoint.getArgs());
}

Je n'ai pas testé ce code mais il permet de faire passer le message.

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