单点登录 CAS 5.*

前面演示的项目 都是使用的固定用户,现在,可以尝试从数据库获取用户+密码尝试登录,

创建表和数据:

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

  明文密码的只有小明,就拿小明试试吧。然后就又登陆成功啦!

原文地址:https://www.cnblogs.com/lewskay/p/10268337.html