gpt4 book ai didi

database - 从数据库中的 jasig cas 服务器检索属性

转载 作者:搜寻专家 更新时间:2023-10-30 20:19:43 26 4
gpt4 key购买 nike

我在从 java cas (JA-SIG) 检索属性时遇到问题。它总是返回空值。

下面是我的代码。我猜是 attributeRepository bean 从未被调用,因为我将表名更改为错误的,它运行了,但它没有给出 SQL 异常的运行时错误。

这是我的 deployerConfigContext.xml 文件(只有相关部分)

<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl">        
<property name="credentialsToPrincipalResolvers">
<list>
<bean class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver">
<property name="attributeRepository">
<ref bean="attributeRepository"/>
</property>
</bean>
</list>
</property>
</bean>

<bean id="attributeRepository" class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
<constructor-arg index="0" ref="dataSource"/>
<constructor-arg index="1" value="SELECT id,is_admin,screen_name FROM user WHERE {0}"/>
<property name="queryAttributeMapping">
<map>
<entry key="login" value="eroshan@rcapl.com" />
</map>
</property>
<property name="resultAttributeMapping">
<map>
<entry key="id" value="150" />
<entry key="is_admin" value="0" />
<entry key="screen_name" value="xxxx.." />
</map>
</property>
</bean>

下面是我检索属性的客户端代码。 org.jasig.cas.client.authentication.Saml11AuthenticationFilter 用于获取数据。

<h1>CAS Attribute Test</h1>
<p>User Id: <%= request.getRemoteUser() %></p>
<%
if (request.getUserPrincipal() != null) {
AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal();

Map attributes = principal.getAttributes();
out.println("attribute :"+attributes.size());
if (attributes != null) {
Iterator attributeNames = attributes.keySet().iterator();

out.println("Received attributes: <b>" + (attributeNames.hasNext() ? "YES!" : "No") + "</b>");
out.println("<hr><table border='3pt' width='100%'>");
out.println("<th colspan='2'>Attributes</th>");
out.println("<tr><td><b>Key</b></td><td><b>Value</b></td></tr>");

for (; attributeNames.hasNext();) {
out.println("<tr><td>");
String attributeName = (String) attributeNames.next();
out.println(attributeName);
out.println("</td><td>");
Object attributeValue = attributes.get(attributeName);
out.println(attributeValue);
out.println("</td></tr>");
}
out.println("</table>");
} else {
out.println("<pre>The attribute map is empty. Review your CAS filter configurations.</pre>");
}
} else {
out.println("<pre>The user principal is empty from the request object. Review the wrapper filter configuration.</pre>");
}
%>

当我打印属性大小时,它显示为 0。我的代码有什么问题?我在解决这个问题时遇到了很大的麻烦。有很多资源可用于从 Ldap 获取属性,但我需要从我的数据库中获取属性。

最佳答案

你的配置看起来不错,但是你需要为你的 CAS 服务定义你想要返回的属性,我在你提取的配置中没有看到这部分:这是在 RegisteredServiceImpl bean 的 serviceRegistryDao bean 中完成的,属性“允许的属性”。

一个例子:

<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="evaluationOrder" value="10000001" />
<property name="allowedAttributes">
<list>
<value>name</value>
<value>first_name</value>
<value>middle_name</value>`
...

关于database - 从数据库中的 jasig cas 服务器检索属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12313433/

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