CAS 配置資料庫方式賬戶認證
該篇博文轉自:https://www.imooc.com/article/3729
CAS給出的預設例子是將賬戶資訊(使用者名稱/密碼)放在配置檔案中,實際執行系統,賬戶資訊通常是在資料庫中儲存。現在我們就配置一下如何對資料庫中儲存的賬戶進行認證。具體配置參考如下:
1. 首先,在mysql資料庫中建立一張賬戶表account,並新增一些賬戶例子。
注意,密碼我們使用了MD5加密方式。
2. 在deployerConfigContext.xml檔案中找到bean id="primaryAuthenticationHandler" 區並註釋掉,替換成如下內容:
<bean id="primaryAuthenticationHandler"
class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
<property name="dataSource" ref="dataSource" />
<property name="sql" value="select password from account where username=? " /> <property name="passwordEncoder" ref="passwordEncoder"/>
</bean>
也就是說,我們替換了認證外掛,採用SQL語句訪問資料庫獲取密碼認證方式。QueryDatabaseAuthenticationHandler在cas-server-support-jdbc子工程中。
CAS提供了多種認證方式,除JDBC訪問資料庫外,還可以使用LDAP、x509、spnego等方式,這些都以子工程外掛的方式提供。當然,我們同樣可以開發自己需要的外掛。
由於我們密碼使用了MD5加密方式,我們引進了passwordEncoder,定義如下:
<bean id="passwordEncoder"
class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">
<constructor-arg value="MD5"/>
<property name="characterEncoding">
<value>UTF-8</value>
</property>
</bean>
然後我們定義資料來源,這在spring工程中很常見:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName">
<value>com.mysql.jdbc.Driver</value>
</property>
<property name="url">
<value>jdbc:mysql://127.0.0.1:3306/jiweibu?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true</value>
</property>
<property name="username" value="root" />
<property name="password" value="123456" />
<property name="initialSize" value="10" />
<property name="maxActive" value="500" />
<property name="maxWait" value="60000" />
<property name="validationQuery"><value>select 1</value></property>
</bean>
3. 在pom.xml中引入下面三個工程包,包括CAS JDBC認證外掛、Mysql驅動還有dbcp連線池:
<dependency>
<groupId>org.jasig.cas</groupId>
<artifactId>cas-server-support-jdbc</artifactId>
<version>${project.version}</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.26</version>
</dependency>
<dependency>
<groupId>commons-dbcp</groupId>
<artifactId>commons-dbcp</artifactId>
<version>1.4</version>
</dependency>
重新編譯build,執行修改的CAS認證中心,使用資料庫中的賬號嘗試登入。
至此,我們介紹瞭如何修改登入登出流程,如何修改CAS Server相關介面,如何實現記住密碼免登入功能,以及如何訪問資料庫中賬號去認證。通過這些實踐活動,我們對CAS有了相當的理解,可以應對一般的應用場景了。
後面,我們將進一步深入CAS,解決在大型網際網路應用中,基於CAS實現SSO需要關注的問題。