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

网上很多关于配置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的配置,如果不看源码,还真的有点麻烦。大哭



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值