J'utilise SecurityContextHolder
et une coutume UserDetailsService
pour obtenir UserDetails
de SecurityContextHolder
:Le thread SecurityContextHolder est-il sécurisé?
Object o = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetailsDTO user = (UserDetailsDTO) o;
je quittais les chèques nuls, etc., mais c'est l'idée. J'utilise ceci dans un @Around
pointcut d'un @Aspect
:
@Around("execution(* user.service.*.*(..))")
public Object audit(ProceedingJoinPoint call) throws Throwable {
// get user id
// add audit row in db
}
regardant la classe SecurityContextHolder
, il utilise un ThreadLocal
par défaut, mais les choses pointcut semble aussi avoir une sorte de logique de filetage encapsulé.
Est-il possible qu'il puisse y avoir une collision de l'utilisateur (c'est-à-dire accéder à UserA à partir d'une session pour un événement d'audit UserB dans une autre session simultanée), ou éventuellement un utilisateur nul.
Existe-t-il un meilleur moyen d'obtenir les informations d'identification/profil utilisateur?
Je l'ai vu, mais l'homme semble-t-il comme une énorme erreur pour les gars du printemps. Une classe util statique, et setStrategyName a ce texte Javadoc: 'NE PAS appeler cette méthode plus d'une fois pour une JVM donnée, car elle réinitialisera la stratégie et affectera négativement les threads existants en utilisant l'ancienne stratégie.» Je pense que je vais probablement finir par créer une classe wrapper singleton. – Droo
Je suppose qu'il existe également une propriété système: 'static public final String SYSTEM_PROPERTY =" spring.security.strategy ";' – Droo