• 单点登录 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
    

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

  • 相关阅读:
    ZOJ 1649: Rescue(BFS)
    UVA
    hdu2458:Kindergarten (最大独立集)
    hdu3829:Cat VS Dog (最大独立集)
    Java 泛型
    request.getParameter() 和request.getAttribute() 区别
    Solr版本安装部署指南
    java.sql.SQLException: Incorrect string value: 'xE6x88x91xE7x9Ax84...' for column 'groupName'
    Incorrect string value: 'xF0x9Fx98x84xF0x9F
    java里面byte数组和String字符串怎么转换
  • 原文地址:https://www.cnblogs.com/lewskay/p/10268337.html
Copyright © 2020-2023  润新知