您的位置:首页 > 其它

casServer单点登录返回更多用户信息正确配置

2013-07-18 11:47 609 查看
网上很多关于配置casServer的文章,很详细,但是想配置出自己合适的版本会出现好多问题。


第一 版本:


我用的是cas-server-core-3.3.3.jar  cas-client-core-3.2.1.jar这个版本

deployerConfigContext.xml应该这样设置返回,构造函数的参数应该为3个,网上有的是2个,配置会报错,应该是版本问题 username是默认输入框的值<bean class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao" id="attributeRepository1">
<constructor-arg index="0" ref="casDataSource"/>
<constructor-arg index="1">
<list>
<value>username</value>
</list>
</constructor-arg>
<constructor-arg index="2" value="select * from users where username=?"/>
<property name="columnsToAttributes">
<map>
<entry key="username" value="username"/>
<entry key="password" value="password"/>
</map>
</property>
</bean>
然后再添加
<property name="credentialsToPrincipalResolvers">
<list>

<bean
class="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" >

<property name="attributeRepository" ref="attributeRepository1"/>
</bean>

<bean
class="org.jasig.cas.authentication.principal.HttpBasedServiceCredentialsToPrincipalResolver" />

</list>
</property>
最后修改WEB-INF\view\jsp\protocol\2.0\casServiceValidationSuccess.jsp
<c:if test="${fn:length(assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes) > 0}">
<cas:attributes>
<c:forEach var="attr" items="${assertion.chainedAuthentications[fn:length(assertion.chainedAuthentications)-1].principal.attributes}">
<cas:${fn:escapeXml(attr.key)}>${fn:escapeXml(attr.value)}</cas:${fn:escapeXml(attr.key)}>
</c:forEach>
</cas:attributes>
</c:if>


最后在客户端获取时,
AttributePrincipal principal = (AttributePrincipal) request
.getUserPrincipal();
principal.getAttributes().get("email");


一般都是用这个方式去获取值,但我这边就是取不到,打开源码,看到有两个filter 
Cas20ProxyReceivingTicketValidationFilter

Cas10TicketValidationFilter

我配置的是cas10,改回cas20就可以正确取得参数。应该是cas10没有获取其他参数的原因,只是简单的验证了ticket的原因

String allowAnyProxy = getPropertyFromInitParams(filterConfig, "acceptAnyProxy", null);
String allowedProxyChains = getPropertyFromInitParams(filterConfig, "allowedProxyChains", null);
String casServerUrlPrefix = getPropertyFromInitParams(filterConfig, "casServerUrlPrefix", null);
Cas20ServiceTicketValidator validator;
if ((CommonUtils.isNotBlank(allowAnyProxy)) || (CommonUtils.isNotBlank(allowedProxyChains))) {
Cas20ProxyTicketValidator v = new Cas20ProxyTicketValidator(casServerUrlPrefix);
v.setAcceptAnyProxy(parseBoolean(allowAnyProxy));
v.setAllowedProxyChains(CommonUtils.createProxyList(allowedProxyChains));
validator = v;
} else {
validator = new Cas20ServiceTicketValidator(casServerUrlPrefix);
}
validator.setProxyCallbackUrl(getPropertyFromInitParams(filterConfig, "proxyCallbackUrl", null));
validator.setProxyGrantingTicketStorage(this.proxyGrantingTicketStorage);
validator.setProxyRetriever(new Cas20ProxyRetriever(casServerUrlPrefix, getPropertyFromInitParams(filterConfig, "encoding", null)));
validator.setRenew(parseBoolean(getPropertyFromInitParams(filterConfig, "renew", "false")));
validator.setEncoding(getPropertyFromInitParams(filterConfig, "encoding", null));

Map additionalParameters = new HashMap();
List params = Arrays.asList(RESERVED_INIT_PARAMS);

for (Enumeration e = filterConfig.getInitParameterNames(); e.hasMoreElements(); ) {
String s = (String)e.nextElement();

if (!params.contains(s)) {
additionalParameters.put(s, filterConfig.getInitParameter(s));
}
}

validator.setCustomParameters(additionalParameters);
validator.setHostnameVerifier(getHostnameVerifier(filterConfig));

caserver配置使用了很多“默认”变量,像一些bean的配置,如果不看源码,还真的有点麻烦。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐