单点登录 CAS 5.* - 从数据库获取用户信息 - 4
前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录,
创建表和数据:
CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `user_name` varchar(255) DEFAULT NULL, `password` varchar(255) DEFAULT NULL, `age` int(4) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; -- 除了小明是明文 其他的都是MD5加密过的 密码均是123456 INSERT INTO `user`( `name`, `user_name`, `password`, `age`) VALUES ( '管理员', 'admin', 'e10adc3949ba59abbe56e057f20f883e', 5); INSERT INTO `user`( `name`, `user_name`, `password`, `age`) VALUES ( '小明', 'xiaoming', '123456', 10); INSERT INTO `user`( `name`, `user_name`, `password`, `age`) VALUES ( '小红', 'xiaohong', 'e10adc3949ba59abbe56e057f20f883e', 25);
pom.xml增加jar包
<dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc</artifactId> <version>${cas.version}</version> </dependency> <dependency> <groupId>org.apereo.cas</groupId> <artifactId>cas-server-support-jdbc-drivers</artifactId> <version>${cas.version}</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.36</version> </dependency>
继续修改 application.properties 文件,增加
#数据源信息
cas.authn.jdbc.query[0].url=jdbc:mysql://127.0.0.1:3306/cas?useSSL=false&useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&allowMultiQueries=true cas.authn.jdbc.query[0].user=root cas.authn.jdbc.query[0].password=123456 cas.authn.jdbc.query[0].sql=select * from user where user_name=? cas.authn.jdbc.query[0].fieldPassword=password cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
然后启动测试server 就不启动client测试了,尝试下xiaoming 123456 明文密码进行登录
登陆成功,但是一般数据库密码都不会明文存储,cas提供了MD5,salt等加密方式,并且支持自定义密码校验。现在尝试一下MD5,首先 application.properties中继续增加
#配置密码加密方式
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
重启server 使用xiaoming便不会登录成功,其他两个测试账号则可以成功登录
自定义密码加密方式解密,增加自己的解密工具类 MyPasswordEncoder.java 当然只是随便写了写,校验一下明文密码
package com.xpsd.cloud.security; import org.springframework.security.crypto.password.PasswordEncoder; /** * @Author: L.swallow * @Date: 2019/1/15 17:39 */ public class MyPasswordEncoder implements PasswordEncoder { /** * 对输入的密码加密过程 */ @Override public String encode(CharSequence charSequence) { return charSequence.toString(); } /** * 密码校验过程 */ @Override public boolean matches(CharSequence inputPwd, String dbPwd) { if(dbPwd.contentEquals(inputPwd)){ return true; } return false; } }
修改配置文件:application.properties
#配置密码加密方式 #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.type=com.xpsd.cloud.security.MyPasswordEncoder cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
明文密码的只有小明,就拿小明试试吧。然后就又登陆成功啦!