分類  >  WEB開發 >

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

tags:    時間:2013-12-09 21:40:40
CAS 配置多條SQL語句來返回登錄成功后的數據問題
CAS 服務端在登錄成功會返回客戶端一些信息,以下配置是返回信息的配置
[code=text]
<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>
<!-- 這裡的key需寫username,value對應資料庫用戶名欄位 -->
<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>
<!-- <value>att_email</value> <value>att_name</value> <value>att_role</value> 
<value>att_sys</value> -->
<value>att_usertype</value>
<value>att_name</value>
<value>att_dept</value>
<value>att_msisdn</value>
<value>att_email</value>
<value>att_roleId</value>
<value>att_sysCode</value>
</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>
[/code]現在我又這樣的需求就是根據不同的類型返回不同的數據,查不同的表,也就是說上述配置中
<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獲取數據返回。

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

推薦閱讀文章

Bookmark the permalink ,來源:互聯網