Я использую CAS для аутентификации, отлично работает с Ldap и мне нужно получить атрибуты CAS сеанса контекста с помощью Spring:
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-core</artifactId>
<version>3.3.3</version>
</dependency>
<dependency>
<groupId>org.jasig.cas.client</groupId>
<artifactId>cas-client-integration-tomcat-v7</artifactId>
<version>3.3.3</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-cas-client</artifactId>
<version>3.0.3.RELEASE</version>
</dependency>
Когда я успешно вхожу в систему с помощью CAS, я вижу атрибуты, которые мне нужны на странице входа в систему:
Attribute Value(s)
cn [usertest]
givenName [usertest]
mail [testuser@company.com]
sn [smith j. ]
sn1 [smith]
sn2 [j.]
uid [usertest]
Я могу без проблем получить приведенные ниже атрибуты:
public void showUserInfo() {
SecurityContext ctx = SecurityContextHolder.getContext();
UserDetails userDetails = (UserDetails)ctx.getAuthentication().getPrincipal();
System.out.println("Username : " + ctx.getAuthentication().getName().toString());
System.out.println("Session details : " + ctx.getAuthentication().getDetails().toString());
System.out.println("Credentials : " + ctx.getAuthentication().getCredentials().toString());
System.out.println("Roles : " + ctx.getAuthentication().getPrincipal().toString());
System.out.println("Authorities : " + ctx.getAuthentication().getAuthorities().toString());
}
И вывод:
Username: testuser
Session details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffde5d4: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: 9E939702576B7421937471BE0154D891
Credentials: FT-7-q07rZ13rAO2UIcTLzMBr-cas4saml.myserver.cas.com
Roles : com.package.myapp.spring.CustomUserDetails@33fa649d: Username: testuser; Password: [PROTECTED];
Enabled: true; AccountNonExpired: true; credentialsNonExpired: true; AccountNonLocked: true; Granted Authorities: ROLE_ADMIN,ROLE_DEV,ROLE_USER
}
Но когда я пытаюсь восстановить атрибуты "speci c" ldap, я не знаю, как их получить:
public void showUserInfo2() {
SecurityContext ctx = SecurityContextHolder.getContext();
UserDetails userDetails = (UserDetails)ctx.getAuthentication().getPrincipal();
AttributePrincipal principal1 = (AttributePrincipal) ctx.getAuthentication().getPrincipal();
System.out.println ("cn: " + principal1.getAttributes().get("cn"));
AttributePrincipal principal2 = (AttributePrincipal) userDetails;
System.out.println ("cn: " + principal2.getAttributes().get("cn"));
}
Вывод:
Error: com.package.myapp.spring.spring.CustomUserDetails cannot be cast to org.jasig.cas.client.authentication.AttributePrincipal
Я знаю, что получаю эту ошибку потому что я не знаю, как получить атрибуты AttributePrincipal и неправильно. Итак, как правильно получить эти атрибуты ldap из сеанса CAS.