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

来源:互联网 发布:欧洲审美知乎 编辑:程序博客网 时间:2024/05/17 06:02

网上很多关于配置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><beanclass="org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver" ><property name="attributeRepository" ref="attributeRepository1"/></bean><beanclass="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的配置,如果不看源码,还真的有点麻烦。大哭



原创粉丝点击