上篇博客介紹的CAS的Demo,登錄界面用戶名、密碼並沒有通過數據庫查詢認證。本博客,將介紹如何通過xml配置,進行CAS登錄數據庫查詢認證。
所需數據庫sso_cas,庫中的表:tb_user,表中字段:Id、username、password;
數據庫查詢認證(通過xml配置)
1,修改cas服務端配置
tomcat下webapps/cas/WEB_INF/deployerConfigContext.xml 文件做如下修改:
<beanclass="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler"/>
修改爲:
<beanclass="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<propertyname="dataSource" ref="dataSource" ></property>
<propertyname="sql" value="select password from tb_user whereusername=?" ></property>
</property>
</bean>
添加datasource bean的定義:
<beanid="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName" value="com.mysql.jdbc.Driver" />
<propertyname="url" value="jdbc:mysql://localhost/sso_cas" />
<propertyname="username" value="root" />
<propertyname="password" value="root" />
</bean>
注意
1,QueryDatabaseAuthenticationHandler是cas-server-support-jdbc提供的查詢接口其中一個是通過配置一個 SQL 語句查出密碼,與所給密碼匹配;
2,sql語句:select password from tb_user whereusername=?根據用戶名username 查詢表tb_user中密碼password字段,CAS會匹配用戶輸入的密碼,如果匹配則通過;
注:可配置多個數據庫
如果需要配置多個數據庫,可以配置多個QueryDatabaseAuthenticationHandler和多個datasource
假如a_user中有一個用戶:auser,b_user中有一個用戶buser,這樣你無論用哪一個用戶登錄,CAS就會先查a_user,如果用戶名密碼都正確,那麼就通過,如果a_user中驗證失敗,那麼CAS就會再查b_user,用戶名密碼都正確就算通過了,此時不正確,就算這次登錄驗證沒通過。
添加相關的jar包
需要在web項目的lib下添加兩個包:cas-server-support-jdbc-x.x.x.jar 和 mysql-connector-java-x.x.x-bin.jar(具體版本號根據情況而定)
按如下配置好後,進入CAS登錄頁,用戶名密碼需要通過查詢數據庫來認證,輸入用戶名admin,密碼123,纔可登錄成功;如果輸入用戶名admin,密碼admin是不能登錄成功。