2015-06-09 1 views
1

Привет, я использую CAS для единого входа в моем приложении (весеннее приложение). Мне удалось войти в систему с CAS, я получаю только имя пользователя, но не адрес электронной почты или другие атрибуты от CAS.Атрибуты пользователя LDAP от CAS

Для аутентификации в стороне CAS я использую LDAP и настроен в deployerConfigContext.xml ниже код

В AuthenticationManager добавлен код ниже

<property name="credentialsToPrincipalResolvers"> 
<list> 
    <bean class="org.jasig.cas.authentication.principal.CredentialsToLDAPAttributePrincipalResolver"> 
      <property name="credentialsToPrincipalResolver"> 
       <bean 
        class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" /> 
      </property> 
      <property name="filter" value="sAMAccountName=%u" /> 
      <property name="principalAttributeName" value="sAMAccountName" /> 
      <property name="searchBase" value="DC=test,DC=com" /> 
      <property name="contextSource" ref="LDAPcontextSource" /> 
      <property name="attributeRepository"> 
       <ref bean="attributeRepository" /> 
      </property> 
     </bean> 
</list> 
</property> 

И использовали LdapPersonAttributeDao

<bean id="attributeRepository" 
     class="org.jasig.services.persondir.support.ldap.LdapPersonAttributeDao"> 
     <property name="baseDN" value="cn=test,ou=test,dc=test,dc=com" /> 
     <property name="contextSource" ref="LDAPcontextSource" /> 
     <property name="requireAllQueryAttributes" value="true" /> 
     <property name="queryAttributeMapping"> 
      <map> 
       <entry key="username" value="sAMAccountName" /> 
      </map> 
     </property> 
     <property name="resultAttributeMapping"> 
      <map> 
       <entry key="displayName" value="cn" /> 
       <entry key="mail" value="email" /> 
      </map> 
     </property> 
    </bean> 

Я прочитал несколько сообщений и обнаружил, что для добавления свойства allowedAttributes в приведенной ниже конфигурации находится конфигурация

<bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl"> 
     <property name="registeredServices"> 
      <list> 
       <bean class="org.jasig.cas.services.RegisteredServiceImpl"> 
    <property name="id" value="0" /> 
    <property name="name" value="HTTP" /> 
    <property name="description" value="Only Allows HTTP Urls" /> 
    <property name="serviceId" value="http://**" /> 
    <property name="allowedAttributes"> 
     <list> 
      <value>cn</value> 
      <value>mail</value> 
     </list> 
    </property> 
</bean> 

В моей стороне приложения я написал класс, чтобы получить имя пользователя и адрес электронной почты ниже приведен код

public class RestAuthenticationUserDetailsService implements AuthenticationUserDetailsService<CasAssertionAuthenticationToken> { 

    @Override 
    public UserDetails loadUserDetails(CasAssertionAuthenticationToken token) 
      throws UsernameNotFoundException { 
     Object principal = token.getPrincipal(); 
     String username = token.getName(); 
     LOGGER.info(username); 

     Collection<GrantedAuthority> authorities = new ArrayList<GrantedAuthority>(); 
     return new User(username, "", authorities); 
    } 

} 

Я получал имя пользователя, но не получает другие атрибуты, такие как электронная почта. Когда я отлаживаю, я вижу, что основные атрибуты пустые.

Может кто-нибудь помочь мне в этом, как получить атрибуты для моего приложения Заранее спасибо.

ответ

1

Я вижу в config в deployerConfigContext.xml. 1. В, ключе атрибутов входа LDAP, значение принципала (значение) 2., вы должны позволить значение в Принципале (пример DISPLAYNAME & почты)

Надеются, что это поможет вам, ура!