- 下载地址:https://github.com/apereo/cas-overlay-template
- 解压压缩包后,进入目录,打开cmd窗口,输入命令:bulid.cmd run
- 使用idea打开解压后的目录,拉取maven依赖
-
创建java目录和resource目录
-
在resources目录中,我们把target目录下的services文件夹和application.properties文件拷贝到我们的resources目录下
- 打开HTTPSandIMAPS-10000001这个文件,在里面加上http,支持http请求访问
-
然后打开我们application.properties文件,把这三行注释掉,这是给配置证书情况下使用的,也就是要给配置https使用的。我们这里暂时不用
- pom文件加上支持数据库连接的
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.46</version>
</dependency>
<dependency>
<groupId>com.oracle</groupId>
<artifactId>ojdbc8</artifactId>
<version>12.2.0.1</version>
</dependency>
- xmlsectool包没下载下来,可以点击https://build.shibboleth.net/maven/releases/net/shibboleth/tool/xmlsectool/2.0.0/连接下载,放到本地仓库,离线安装命令
mvn install:install-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0 -Dpackaging=jar -Dfile=D:/Program/.m2/repository/others/ojdbc-14.jar - 连接数据库配置信息
mysql配置信息
#允许http
cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
#查询账号密码sql,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from user where username = ?
#指定上面的sql查询字段名(必须)
cas.authn.jdbc.query[0].fieldPassword=password
#指定过期字段,1为过期,若过期需要修改密码
cas.authn.jdbc.query[0].fieldExpired=expired
#为不可用字段段,1为不可用,
cas.authn.jdbc.query[0].fieldDisabled=disabled
#数据库方言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/db_user2?useUnicode=true&characterEncoding=UTF-8
#数据库用户名
cas.authn.jdbc.query[0].user=root
#数据库密码
cas.authn.jdbc.query[0].password=
#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
oracle配置信息
#注释默认账号
#cas.authn.accept.users=casuser::Mellon
#添加以下配置 cas默认MD5加密后为全部小写,如果数据库存的MD5密码为大写,需加上lower
cas.authn.jdbc.query[0].sql=SELECT lower(u_password) as psw FROM org_user WHERE u_loginname=?
cas.authn.jdbc.query[0].fieldPassword=psw #指明密码字段名称
cas.authn.jdbc.query[0].healthQuery=SELECT 1 from dual
cas.authn.jdbc.query[0].url=jdbc:oracle:thin:@192.168.0.22:1521/pdbhnjczs #oracle数据库版本为12C,pdbhnjczs为PDB,所以连接串写为"IP:端口/PDB"的格式,而不是"IP:端口:DB"
cas.authn.jdbc.query[0].user=数据库登录账号
cas.authn.jdbc.query[0].password=数据库登录密码
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.Oracle10gDialect
cas.authn.jdbc.query[0].driverClass=oracle.jdbc.OracleDriver
#密码策略
#这个策略,就是将我们提交的密码进行的处理方式;处理过后再跟数据库中的密码比较
cas.authn.jdbc.query[0].passwordEncoder.type=DEFAULT
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=MD5
cas.authn.jdbc.query[0].passwordEncoder.strength=32 #MD5加密长度分为16位,32位
- idea中配置tomcat,启动cas服务端。
- 访问地址http://localhost:8080/cas/login
问题
-
账户禁用
cas报错
ERROR[org.apereo.cas.authentication.PolicyBasedAuthenticationManager] -
<Authentication has failed. Credentials may be incorrect or CAS cannot find authentication
handler that supports [username] of type [UsernamePasswordCredential], which suggests a configuration problem.>
select ID USER_ID, LASTNAME USER_ACCOUNT,LOGINID USER_NAME, LOWER(PASSWORD) as PASSWORD, TELEPHONE PHONE,case when status > 3 then 0 else 1 end disabled from ECOLOGY.hrmresource where loginid='zhangsan'
因为查询出来的用户disabled为1,用户账号不可用
- cas的MD5加密之后,hash字符都是小写的,而mysql数据库中存的都是大写的,导致提示认证无效。
cas.authn.jdbc.query[0].sql=select lower(password) as password from UC_USER WHERE username=?