分類    >

CAS 配置多條SQL語句來返回登錄成功后的數據問題

tags:CAS 配置,SQL語句,數據問題    時間:2013-12-02 11:47:39
<bean
        class="org.jasig.services.persondir.support.jdbc.MultiRowJdbcPersonAttributeDao"
        id="attributeRepository">
        <constructor-arg index="0" ref="dataSource" />
        <constructor-arg index="1"
            value="SELECT 'att_usertype' AS att_usertype,0 AS usertype,'att_name' AS att_name,u.user_name,'att_dept' AS att_dept,u.dept_id,'att_msisdn' AS att_msisdn,u.user_msisdn,'att_email' AS att_email,u.user_email,'att_roleId' AS att_roleId,r.role_id,'att_sysCode' AS att_sysCode,    r.sys_code FROM table1 a,table2 r WHERE     r.user_id = u.user_id and {0}" />
        <property name="queryAttributeMapping">
            <map>
                
                <entry key="username" value="u.user_id" />
            map>
        property>
        <property name="nameValueColumnMappings">
            <map>
                <entry key="att_usertype" value="usertype" />
                <entry key="att_name" value="user_name" />
                <entry key="att_dept" value="dept_id" />
                <entry key="att_msisdn" value="user_msisdn" />
                <entry key="att_email" value="user_email" />
                <entry key="att_roleId" value="role_id" />
                <entry key="att_sysCode" value="sys_code" />
            map>
        property>
 
    bean>
 
    <!-- Sample, in-memory data store for the ServiceRegistry. A real implementation 
        would probably want to replace this with the JPA-backed ServiceRegistry DAO 
        The name of this bean should remain "serviceRegistryDao". -->
    <bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl">
        <property name="registeredServices">
            <list>
 
                <bean class="org.jasig.cas.services.RegexRegisteredService">
                    <property name="id" value="0" />
                    <property name="name" value="HTTP and IMAP" />
                    <property name="description" value="Allows HTTP(S) and IMAP(S) protocols" />
                    <property name="serviceId" value="^(https?|imaps?)://.*" />
                    <property name="evaluationOrder" value="10000001" />
                    <property name="allowedAttributes">
                        <list>
                            <!-- att_email att_name att_role 
                                att_sys -->
                            <value>att_usertypevalue>
                            <value>att_namevalue>
                            <value>att_deptvalue>
                            <value>att_msisdnvalue>
                            <value>att_emailvalue>
                            <value>att_roleIdvalue>
                            <value>att_sysCodevalue>
                        list>
                    property>
                bean>
                <!-- Use the following definition instead of the above to further restrict 
                    access to services within your domain (including subdomains). Note that example.com 
                    must be replaced with the domain you wish to permit. -->
 
            list>
        property>
    bean>
現在我又這樣的需求就是根據不同的類型返回不同的數據,查不同的表,也就是說上述配置中

<constructor-arg index="1"
            value="SELECT 'att_usertype' AS att_usertype,0 AS usertype,'att_name' AS att_name,u.user_name,'att_dept' AS att_dept,u.dept_id,'att_msisdn' AS att_msisdn,u.user_msisdn,'att_email' AS att_email,u.user_email,'att_roleId' AS att_roleId,r.role_id,'att_sysCode' AS att_sysCode,    r.sys_code FROM table1 a,table2 r WHERE     r.user_id = u.user_id and {0}" />

不一定是這個sql語句可能還有一個備用的sql配置一下,然後根據需求來選擇執行哪一個SQL語句,請問這個怎麼修改cas的源碼?或者是配置謝謝!!
--------解決方案

這個的話,cas好像沒有支持這種特殊需求,應該是不能通過配置實現。

------解決方案--------------------
你要使用不同的sql,相應的返回的屬性就不一樣,可以考慮增加一個類似attributeRepository的bean,注入到org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver,然後在AbstractPersonDirectoryCredentialsToPrincipalResolver根據不同條件使用不同的bean獲取數據返回。

------解決方案--------------------
引用
這個的話,cas好像沒有支持這種特殊需求,應該是不能通過配置實現。

你要使用不同的sql,相應的返回的屬性就不一樣,可以考慮增加一個類似attributeRepository的bean,注入到org.jasig.cas.authentication.principal.UsernamePasswordCredentialsToPrincipalResolver,然後在AbstractPersonDirectoryCredentialsToPrincipalResolver根據不同條件使用不同的bean獲取數據返回。

只是個想法,不知道行不行。

是的,我昨天也是研究了源碼和配置文件好久,最後的結論是在配置文件裡面增加一個相同的配置然後再引用進去,修改源碼,根據自己的需求執行不同的Bean對象就行了

推薦閱讀文章

Bookmark the permalink ,來源:互聯網