gpt4 book ai didi

java - 来自 CAS 的 LDAP 用户属性

转载 作者:行者123 更新时间:2023-11-30 08:08:37 25 4
gpt4 key购买 nike

您好,我在我的应用程序(spring 应用程序)中使用 CAS 进行单点登录。我能够使用 CAS 登录,我仅获得用户名,但无法从 CAS 获得电子邮件或任何其他属性。

对于 CAS 端的身份验证,我使用 LDAP 并在部署器ConfigContext.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);
}

}

我获取了用户名,但没有获取其他属性,例如电子邮件。当我调试时,我看到主要属性是空的。

有人可以帮助我了解如何获取我的应用程序的属性吗提前致谢。

最佳答案

我在deployerConfigContext.xml的配置中看到。1. 中,key为LDAP条目属性,value为Principal的(值)2. 在 中,您应该允许Principal 中的值(例如displayName 和mail)

希望对你有帮助,加油!

关于java - 来自 CAS 的 LDAP 用户属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30725850/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com