1. 程式人生 > >CAS 配置資料庫方式賬戶認證

CAS 配置資料庫方式賬戶認證

    該篇博文轉自:https://www.imooc.com/article/3729

        CAS給出的預設例子是將賬戶資訊(使用者名稱/密碼)放在配置檔案中,實際執行系統,賬戶資訊通常是在資料庫中儲存。現在我們就配置一下如何對資料庫中儲存的賬戶進行認證。具體配置參考如下:

    

1. 首先,在mysql資料庫中建立一張賬戶表account,並新增一些賬戶例子。
q5
注意,密碼我們使用了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需要關注的問題。