單點登錄 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

  明文密碼的只有小明,就拿小明試試吧。然后就又登陸成功啦!

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM