2010-07-20 27 views
6

Uygulamamda LDAP kimlik doğrulaması kullanıyorum. Ama aynı zamanda, metod girişi (kullanıcı adı, şifre) ile kimlik doğrulama gerektiren 2 uzaktan servisim var. Yöntem, başka bir yöntemi çağırmamı sağlayan güvenlik belirtecini döndürür, yani güvenlik belirtecini ilk argüman olarak hizmet yöntemlerine geçirmeliyim.
Bu yüzden, LDAP kullanarak başarılı giriş yaptıktan hemen sonra bu güvenlik jetonlarını almak ve bunları SecurityContext'te saklamak istiyorum. kimlik doğrulama-başarı-işleyicisi-form-oturum açma öğeyi kullanmaya çalıştım. İşleyiciyi kullanarak SecurityContext'teki Kimlik Doğrulaması nesnesini, yalnızca şifreyi değil, güvenlik belirteçlerini de içeren özel AuthenticationToken ile değiştiriyorum. Ancak bu durumda hiçbir kimlik doğrulama sağlayıcısının bu belirteç sınıfını desteklememesi bir istisna sahibim. HTTP oturumunda jetonları depolamanın da mümkün olduğunu biliyorum, ancak bu durumda oturumu servis nesnesine aktarmam gerekiyor, bu yüzden tokenleri SecurityContext'te saklamak istiyorum.Yay güvenliği için SecurityContext'te özel bilgiler nasıl saklanır?

servis güvenlik belirteci işlemek için en iyi yaklaşım nedir? 'UserDetails' arasında

cevap

10

Ben genellikle doğrudan demek başına kullanıcıya bağlantılı olmayabileceğini ek bilgi depolamak için Authentication.getDetails() nesnesini kullanın. Böylece, bu alanda istediğiniz herhangi bir nesneyi saklayabilirsiniz (örneğin bir HashMap) ve Authentication nesne yaşam döngüsünü paylaşır.

HashMap<String, Object> info = new HashMap<String, Object>(); 
info.put("extraInfo", "info"); 
auth.setDetails(info); 
... 
Map<String, Object> i = (Map<String, Object>)SecurityContextHolder.getContext().getAuthentication.getDetails(); 
4

Uygulamanız herhangi bir ek veri tutabilir. Başarılı girişten sonra daha sonra erişilebilen SecurityContext'te saklanan budur.

(UserDetails uygulayan MyUserDetails varsayar) gibi daha sonra da erişebilmeniz

Object principal = SecurityContextHolder.getContext().getAuthentication(); 
if (principal instanceof MyUserDetails) { 
    MyUserDetails mud = (MyUserDetails) principal; 
    mud.getMyData(); //Extract your additional data here 
} 
+0

LDAP kimlik doğrulaması ile userDetailsSerivce kullanabileceğime emin değilim. – viator

+1

Tüm UserDetailsService'yi uygulamanız gerekmez. Sadece kendi uygulamanızın LDAP ile uygulanmasını kullanabilirsiniz. İşte bunun nasıl yapılacağı hakkında bilgi - http://static.springsource.org/spring-security/site/docs/3.1.x/reference/ldap.html#ldap-custom-user-details – Gopi

İlgili konular