मैं SecurityContextHolder
का उपयोग करें और एक कस्टम UserDetailsService
SecurityContextHolder
से UserDetails
प्राप्त करने के लिए:सुरक्षाContextHolder धागा सुरक्षित है?
Object o = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
UserDetailsDTO user = (UserDetailsDTO) o;
मैं अशक्त चेक, आदि बाहर छोड़ दिया है, लेकिन यह विचार है। मैं एक @Aspect
के @Around
pointcut में यह उपयोग कर रहा हूँ:
@Around("execution(* user.service.*.*(..))")
public Object audit(ProceedingJoinPoint call) throws Throwable {
// get user id
// add audit row in db
}
SecurityContextHolder
वर्ग को देखते हुए, यह डिफ़ॉल्ट रूप से एक ThreadLocal
का उपयोग करता है, लेकिन pointcut सामान भी समझाया सूत्रण तर्क न किसी तरह का लगता है।
क्या यह संभव है कि उपयोगकर्ता टकराव हो सकता है (यानी किसी अन्य समवर्ती सत्र में उपयोगकर्ताबी ऑडिट ईवेंट के लिए एक सत्र से उपयोगकर्ता ए तक पहुंचें), या संभवतः एक शून्य उपयोगकर्ता पूरी तरह से।
क्या प्रमाण-पत्र/उपयोगकर्ता प्रोफ़ाइल प्राप्त करने का कोई बेहतर तरीका है?
मैंने देखा कि, लेकिन आदमी ऐसा लगता है कि वसंत लोगों के लिए एक विशाल मिस्की है। एक स्थैतिक उपयोग वर्ग, और setStrategyName में यह जावाडोक ब्लर्ब है: 'किसी दिए गए जेवीएम के लिए इस विधि को एक से अधिक बार कॉल न करें, क्योंकि यह रणनीति को फिर से शुरू करेगा और पुराने रणनीति का उपयोग करके किसी भी मौजूदा धागे को प्रतिकूल रूप से प्रभावित करेगा।' मुझे लगता है कि मैं शायद एक सिंगलटन रैपर वर्ग बनाने के अंत में। – Droo
मुझे लगता है कि एक सिस्टम प्रॉपर्टी भी है: 'सार्वजनिक स्थैतिक अंतिम स्ट्रिंग SYSTEM_PROPERTY = "spring.security.strategy"; ' – Droo