5、cas4.2.x shiro返回用戶信息|8月更文挑戰

這是我參與8月更文挑戰的第9天,活動詳情查看:8月更文挑戰java

 1.找到cas server 中的 deployerConfigContext.xml

註釋掉   mysql

<!-- <bean id="attributeRepository" class="org.jasig.services.persondir.support.NamedStubPersonAttributeDao"\
        p:backingMap-ref="attrRepoBackingMap" /> -->

    <!-- <util:map id="attrRepoBackingMap">

       <entry key="uid" value="uid" />\
       <entry key="eduPersonAffiliation" value="eduPersonAffiliation" />

       <entry key="groupMembership" value="groupMembership" />

       <entry>

        <key>

                   <value>memberOf</value>

         </key>

         <list>

              <value>faculty</value>

                <value>staff</value>

               <value>org</value>\
        </list>

    </entry>

        </util:map> -->
複製代碼

添加代碼:spring

<bean id="attributeRepository"
        class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
        <constructor-arg index="0" ref="dataSource" />
        <constructor-arg index="1"
            value="SELECT username,password,email,userId,sex,telPhone,mobileNumber, contents,sysStatus,sysUpDated,sysBack1,sysBack2,sysBack3 FROMDC_US_USERINFO WHERE {0}" />
        <property name="queryAttributeMapping">
            <map>
                <entry key="username" value="username" />
            </map>
        </property>
        <property name="resultAttributeMapping">
            <map>
                <!--key爲對應的數據庫字段名稱,value爲提供給客戶端獲取的屬性名字,系統會自動填充值 -->
                <entry key="username" value="username"></entry>
                    <entry key="password" value="password"></entry>
                <entry key="email" value="email"></entry>
                <entry key="userId" value="userId"></entry>
                <entry key="sex" value="sex"></entry>
                <entry key="telPhone" value="telPhone"></entry>
                <entry key="mobileNumber" value="mobileNumber"></entry>
                
                <entry key="contents" value="contents"></entry>
                <entry key="sysStatus" value="sysStatus"></entry>
                <entry key="sysUpDated" value="sysUpDated"></entry>
                <entry key="sysBack1" value="sysBack1"></entry>
                <entry key="sysBack2" value="sysBack2"></entry>
                <entry key="sysBack3" value="sysBack3"></entry>
            
            </map>
        </property>
    </bean>
複製代碼

deployerConfigContext.xml的完整代碼:sql

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
    xmlns:p="http://www.springframework.org/schema/p" xmlns:c="http://www.springframework.org/schema/c"
    xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:sec="http://www.springframework.org/schema/security"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd
       http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd
       http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util.xsd">


    <util:map id="authenticationHandlersResolvers">
        <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
        <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" />
    </util:map>

    <util:list id="authenticationMetadataPopulators">
        <ref bean="successfulHandlerMetaDataPopulator" />
        <ref bean="rememberMeAuthenticationMetaDataPopulator" />
    </util:list>

    <!-- <bean id="attributeRepository" class="org.jasig.services.persondir.support.NamedStubPersonAttributeDao"
        p:backingMap-ref="attrRepoBackingMap" /> -->
        
    <!-- <alias name="acceptUsersAuthenticationHandler" alias="primaryAuthenticationHandler"
        /> -->
    <alias name="personDirectoryPrincipalResolver" alias="primaryPrincipalResolver" />

    <!-- <util:map id="attrRepoBackingMap"> <entry key="uid" value="uid" />
        <entry key="eduPersonAffiliation" value="eduPersonAffiliation" /> <entry
        key="groupMembership" value="groupMembership" /> <entry> <key> <value>memberOf</value>
        </key> <list> <value>faculty</value> <value>staff</value> <value>org</value>
        </list> </entry> </util:map> -->

    <bean id="attributeRepository"
        class="org.jasig.services.persondir.support.jdbc.SingleRowJdbcPersonAttributeDao">
        <constructor-arg index="0" ref="dataSource" />
        <constructor-arg index="1"
            value="SELECT username,password,email,userId,sex,telPhone,mobileNumber, contents,sysStatus,sysUpDated,sysBack1,sysBack2,sysBack3 FROM DC_US_USERINFO WHERE {0}" />
        <property name="queryAttributeMapping">
            <map>
                <entry key="username" value="username" />
            </map>
        </property>
        <property name="resultAttributeMapping">
            <map>
                <!--key爲對應的數據庫字段名稱,value爲提供給客戶端獲取的屬性名字,系統會自動填充值 -->
                <entry key="username" value="username"></entry>
                    <entry key="password" value="password"></entry>
                <entry key="email" value="email"></entry>
                <entry key="userId" value="userId"></entry>
                <entry key="sex" value="sex"></entry>
                <entry key="telPhone" value="telPhone"></entry>
                <entry key="mobileNumber" value="mobileNumber"></entry>
                
                <entry key="contents" value="contents"></entry>
                <entry key="sysStatus" value="sysStatus"></entry>
                <entry key="sysUpDated" value="sysUpDated"></entry>
                <entry key="sysBack1" value="sysBack1"></entry>
                <entry key="sysBack2" value="sysBack2"></entry>
                <entry key="sysBack3" value="sysBack3"></entry>
            
            </map>
        </property>
    </bean>



    <alias name="serviceThemeResolver" alias="themeResolver" />

    <alias name="jsonServiceRegistryDao" alias="serviceRegistryDao" />

    <alias name="defaultTicketRegistry" alias="ticketRegistry" />

    <alias name="ticketGrantingTicketExpirationPolicy" alias="grantingTicketExpirationPolicy" />
    <alias name="multiTimeUseOrTimeoutExpirationPolicy" alias="serviceTicketExpirationPolicy" />

    <alias name="anyAuthenticationPolicy" alias="authenticationPolicy" />
    <alias name="acceptAnyAuthenticationPolicyFactory" alias="authenticationPolicyFactory" />

    <bean id="auditTrailManager"
        class="org.jasig.inspektr.audit.support.Slf4jLoggingAuditTrailManager"
        p:entrySeparator="${cas.audit.singleline.separator:|}"
        p:useSingleLine="${cas.audit.singleline:false}" />

    <alias name="neverThrottle" alias="authenticationThrottle" />

    <util:list id="monitorsList">
        <ref bean="memoryMonitor" />
        <ref bean="sessionMonitor" />
    </util:list>

    <alias name="defaultPrincipalFactory" alias="principalFactory" />
    <alias name="defaultAuthenticationTransactionManager" alias="authenticationTransactionManager" />
    <alias name="defaultPrincipalElectionStrategy" alias="principalElectionStrategy" />
    <alias name="tgcCipherExecutor" alias="defaultCookieCipherExecutor" />

    <!-- <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" -->

    <bean id="dataSource"
        class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName">
            <value>${database.driverClass}</value>
        </property>
        <property name="url">
            <value>${database.url}</value>
        </property>
        <property name="username">
            <value>${database.user}</value>
        </property>
        <property name="password">
            <value>${database.password}</value>
        </property>
    </bean>
    
    <!--  mysql 鏈接-->
    <!--


    <bean name="dataSource" class="org.apache.commons.dbcp2.BasicDataSource"
        p:driverClass="${database.driverClass}" p:jdbcUrl="${database.url}" p:user="${database.user}"
        p:password="${database.password}" p:initialPoolSize="${database.pool.minSize}"
        p:minPoolSize="${database.pool.minSize}" p:maxPoolSize="${database.pool.maxSize}"
        p:maxIdleTimeExcessConnections="${database.pool.maxIdleTime}" p:checkoutTimeout="${database.pool.maxWait}"
        p:acquireIncrement="${database.pool.acquireIncrement}" p:acquireRetryAttempts="${database.pool.acquireRetryAttempts}"
        p:acquireRetryDelay="${database.pool.acquireRetryDelay}" p:idleConnectionTestPeriod="${database.pool.idleConnectionTestPeriod}"
        p:preferredTestQuery="${database.pool.connectionHealthQuery}"/> -->

        
        
    <!-- <alias name="queryDatabaseAuthenticationHandler" alias="primaryAuthenticationHandler"
        /> <alias name="dataSource" alias="queryDatabaseDataSource" /> -->


    <alias name="searchModeSearchDatabaseAuthenticationHandler"
        alias="primaryAuthenticationHandler" />
    <alias name="dataSource" alias="searchModeDatabaseDataSource" />
</beans>

複製代碼

2.cas-server修改casServiceValidationSuccess.jsp文件

此文件是將用戶登陸成功後,將信息生成XML傳遞給客戶端,原文件是隻包含name信息,因此須要修改,新增獲取其餘屬性的代碼以下:數據庫

  <!-- 在server驗證成功後,這個頁面負責生成與客戶端交互的xml信息,在默認的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>
複製代碼

casServiceValidationSuccess.jsp完整代碼:apache

<%@ page session="false" contentType="application/xml; charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<cas:serviceResponse xmlns:cas='http://www.yale.edu/tp/cas'>
    <cas:authenticationSuccess>
        <cas:user>${fn:escapeXml(principal.id)}</cas:user>
        <c:if test="${not empty pgtIou}">
            <cas:proxyGrantingTicket>${pgtIou}</cas:proxyGrantingTicket>
        </c:if>
        <c:if test="${fn:length(chainedAuthentications) > 0}">
            <cas:proxies>
                <c:forEach var="proxy" items="${chainedAuthentications}" varStatus="loopStatus" begin="0" end="${fn:length(chainedAuthentications)}" step="1">
                    <cas:proxy>${fn:escapeXml(proxy.principal.id)}</cas:proxy>
                </c:forEach>
            </cas:proxies>
        </c:if>

        
        <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>
    </cas:authenticationSuccess>
</cas:serviceResponse>
複製代碼

3.因爲我使用shiro ,因此client 中獲取代碼以下:json

   Subject subject = SecurityUtils.getSubject();
   Map attributes = (Map) subject.getPrincipals().asList().get(1);

//獲取id

   String userId=(String) attributes.get("userId");

StringtelPhone=(String) attributes.get("telPhone")
複製代碼
相關文章
相關標籤/搜索