CAS統一登錄認證(4): CAS JDBC認證

                                 CAS 使用MySql數據庫賬戶認證

一、前言

        前幾節中我們部署了自己的Cas Server,知道了單點登錄的原理,學會了啓用https協議。然而,我們卻一直使用的是固定的賬號密碼(casuser/Mellon)進行登錄,而登錄界面上的警告也十分顯眼。使用固定的賬號密碼登錄終究不是長遠之計,Cas提供非常的認證策略,不僅支持JDBC認證、LDAP認證、Basic認證、Shiro認證、Pac4j認證、MongoDB認證、Rest認證、IP黑白名單等認證,還提供了豐富的第三方的認證策略和自定義認證策略。

二、整合JDBC認證

2.1 建庫建表並插入數據

  在MySql數據庫中創建名爲cas的數據庫,創建cas_user表,語句如下:

--創建數據庫
CREATE DATABASE cas DEFAULT CHARSET utf8 COLLATE utf8_general_ci;  
USE cas;  
--創建用戶信息表
DROP TABLE IF EXISTS `cas_user`;  
CREATE TABLE `cas_user` (  
  `id` INT(11) NOT NULL AUTO_INCREMENT,  
  `user_name` VARCHAR(50) DEFAULT NULL,  
  `user_password` VARCHAR(50) DEFAULT NULL,
	`created_time` decimal(13,0) DEFAULT NULL COMMENT '創建時間',
	`expired_flag` int(1) DEFAULT 0 COMMENT '是否過期',
	`disabled_flag` int(1) DEFAULT 1 COMMENT '是否有效',
  PRIMARY KEY (`id`)  
);  
--插入數據
INSERT INTO `cas_user` VALUES (NULL,'admin','123456',NULL,0,0),(NULL,'guest','123456',NULL,0,0);

2.2 添加依賴

  在pom.xml中添加jdbc認證依賴和mysql數據庫驅動依賴,具體如下:

<!-- jdbc驗證-->
<dependency>
    <groupId>org.apereo.cas</groupId>
    <artifactId>cas-server-support-jdbc</artifactId>
    <version>${cas.version}</version>
</dependency>
<!--使用mysql驅動-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>8.0.11</version>
</dependency>

2.3 在application.properties中添加jdbc認證配置

首先將原來配置的靜態認證註釋掉,然後添加如下配置:

#jdbc驗證配置
#查詢賬號密碼sql,必須包含密碼字段
cas.authn.jdbc.query[0].sql=select * from cas_user where user_name=?
#指定上面的sql查詢字段名(必須)
cas.authn.jdbc.query[0].fieldPassword=user_password
#指定過期字段,1爲過期,若過期需要修改密碼
cas.authn.jdbc.query[0].fieldExpired=expired_flag
#不可用字段段,1爲不可用,
cas.authn.jdbc.query[0].fieldDisabled=disabled_flag
#數據庫方言hibernate的知識
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
#數據庫驅動
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
#數據庫連接
cas.authn.jdbc.query[0].url=jdbc:mysql://localhost:3306/cas?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC
#數據庫用戶名
cas.authn.jdbc.query[0].user=root
#數據庫密碼
cas.authn.jdbc.query[0].password=123456
#默認加密策略,通過encodingAlgorithm來指定算法,默認NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=NONE
# 鹽值固定列
#cas.authn.jdbc.encode[0].saltFieldName=username
##靜態鹽值
##cas.authn.jdbc.encode[0].staticSalt=.
#cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
#cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5

 驅動、查詢數據庫等等需要根據不同的場景進行調整:

  • 若密碼無加密,調整passwordEncoder.type=NONE
  • 若密碼加密策略爲SHA,調整passwordEncoder.encodingAlgorithm=SHA
  • 若算法爲自定義,實現org.springframework.security.crypto.password.PasswordEncoder接口,並且把類名配置在passwordEncoder.type

三、測試

在瀏覽器訪問https://localhost/cas/login,我們可以看到之前的警告沒有了。

我們使用數據庫配置的用戶名密碼登錄(admin 123456),可以正常登錄了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章