前面演示的項目 都是使用的固定用戶,現在,可以嘗試從數據庫獲取用戶+密碼嘗試登錄,
創建表和數據:
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
明文密碼的只有小明,就拿小明試試吧。然后就又登陸成功啦!