第四部分:實現基於數據庫的身份驗證
1.下載 Microsoft JDBC Driver for SQL Server。
(1)Microsoft JDBC Driver 4.0 for SQL Server 下載地址:http://www.microsoft.com/zh-cn/download/details.aspx?id=11774
網站提供了兩種格式文件供下載,一種是自解壓的EXE格式文件,還有一種是tar.gz格式的壓縮文件。兩種格式選其一下載即可,經過解壓縮,可以得到兩個JAR格式文件:sqljdbc.jar與sqljdbc4.jar。
(2)由於本人使用的是SQL Server 2012,因此需將“sqljdbc4.jar”拷貝至“%TOMCAT_HOME%\webapps\cas\WEB-INF\lib”文件夾。
(3)在本系列第二部分曾經提及從CAS網站下載“cas-server-3.5.1-release.zip”並解壓縮。在解壓縮的文件下中找到“modules\cas-server-support-jdbc-3.5.1.jar”,將其一並拷貝至“%TOMCAT_HOME%\webapps\cas\WEB-INF\lib”文件夾。
2.創建用於身份驗證的數據庫
(1)啟動SQL Server Management Studio,新建一數據庫“UsersDB”,並在其中建立表“Users”,字段如下:
(2)在表中輸入若干測試數據:
3.配置CAS實現基於數據庫的身份驗證
(1)以管理員身份啟動文本編輯工具,打開“%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml”。找到下面的代碼
<bean id="authenticationManager" class="org.jasig.cas.authentication.AuthenticationManagerImpl">
(2)在該段代碼前面插入 SQL Server JDBC 數據源配置信息:
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver"></property> <property name="url" value="jdbc:sqlserver://192.168.0.123:1433;databaseName=UsersDB"></property> <property name="username" value="sa"></property> <property name="password" value="YourPassword"></property> </bean>
如下圖所示:
(3)找到如下配置信息:
<bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />
該配置信息使用SimpleTestUsernamePasswordAuthenticationHandler驗證用戶,即默認用戶名和密碼相同則驗證通過,用戶名密碼不同則登錄失敗。我們需要將其替換成基於數據庫驗證的配置信息。
首先將上面的配置信息注釋掉,並在其下面插入如下配置信息:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"> <property name="sql" value="select Password from users where username=?" /> <property name="dataSource" ref="dataSource" /> </bean>
如圖所示:
說明:如果你安裝的是SQL Server 2012,那么默認TCP/IP訪問協議不會打開,因此無法通過IP地址的方式訪問SQL Server數據,解決辦法就是啟動SQL Server配置管理器,並在里面啟用TCP/IP,啟用后記得重新啟動SQL Server服務以使設置生效。如圖所示:
(4)保存對“%TOMCAT_HOME%\webapps\cas\WEB-INF\deployerConfigContext.xml”所做的修改。
(5)重新啟動 Tomcat 服務。
4.測試基於數據庫的身份驗證
從客戶端運行前面調試好的WebForm程序(請參考:Yale CAS + .net Client 實現 SSO(3)),輸入用戶名“admin”、密碼“123”,測試是否登錄成功。如果一切配置正常,可以看到程序登錄后的界面如下圖:
5.進一步改善登錄體驗
在實際使用過程中,用戶可能希望通過多種方式登錄:用戶名、密碼;郵箱、密碼;手機號、密碼,如何解決多種方式登錄的問題呢?在隨后的部分我們將深入討論如何解決此類問題。
待續...