Как получить основные атрибуты логина пользователя из CAS клиента - PullRequest
0 голосов
/ 15 апреля 2020

Я использую 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.

...