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),可以正常登录了。

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