搭建单点登录系统之二:完善CAS5.3服务端的配置

CAS服务端搭建好之后,还是有很多地方不能满足我们的需求,需要修改cas.war包中 WEB-INF\classes\application.properties 配置文件,增加我们自定义的配置

1、去掉https认证。

2、从数据库认证用户名和密码。

3、忘记密码发邮件重置密码。

#####################自定义的配置#####################

#配置授权,需要配置 server name的信息,不然就会跑到cas.example.org
cas.server.name=http://cas.xxx.com
cas.server.prefix=${cas.server.name}${server.context-path}

##
#不使用加密传输https协议,仅使用http,默认是打开状态
#
cas.tgc.secure=false

#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true

##
#Logout 退出
#
#是否允许退出后跳转到指定的页面,默认是false,即登录不重定向到service参数指定的页面
cas.logout.followServiceRedirects=true


##
# Query Database Authentication 数据库查询校验用户名开始
#
# 查询账号密码sql,必须包含密码字段
cas.authn.jdbc.query[0].sql=select * from sys_user where account = ?
cas.authn.jdbc.query[0].fieldPassword=PASSWORD
cas.authn.jdbc.query[0].fieldExpired=ISEXPIRED
cas.authn.jdbc.query[0].fieldDisabled=ISLOCK
cas.authn.jdbc.query[0].dialect=org.hibernate.dialect.MySQLDialect
cas.authn.jdbc.query[0].driverClass=com.mysql.jdbc.Driver
cas.authn.jdbc.query[0].url=jdbc:mysql://10.1.1.23:3306/jk2_uat?useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=round&allowMultiQueries=true
cas.authn.jdbc.query[0].user=root
cas.authn.jdbc.query[0].password=123456


#默认加密策略,通过encodingAlgorithm来指定算法,默认NONE不加密
cas.authn.jdbc.query[0].passwordEncoder.type=com.hanchen.cas.CustomPasswordEncoder
cas.authn.jdbc.query[0].passwordEncoder.characterEncoding=UTF-8
cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm=SHA-256

#
##密码管理开始
cas.authn.pm.enabled=true

#发送邮件
spring.mail.host=smtp.xxx.com
#使用25端口,465端口需要SSL协议
spring.mail.port=25
#邮箱用户名(公司邮箱)
spring.mail.username=xxx@xxx.com
#邮箱密码
spring.mail.password=xxxxxx
spring.mail.testConnection=false
spring.mail.properties.mail.smtp.auth=true


#是否必须ssl,如果是465端口,这项则为true
spring.mail.properties.mail.smtp.ssl.enable=false

#发送邮箱
cas.authn.pm.reset.mail.from=${spring.mail.username}
#新密码必须匹配表达式
cas.authn.pm.policy-pattern=\\w{1,24}

#邮箱查找
#根据用户名查找邮箱
cas.authn.pm.jdbc.sqlFindEmail=SELECT email FROM sys_user WHERE account = ?
#修改密码
cas.authn.pm.jdbc.sqlChangePassword=update sys_user set password = ? where account = ?
cas.authn.pm.jdbc.url=${cas.authn.jdbc.query[0].url}
cas.authn.pm.jdbc.user=${cas.authn.jdbc.query[0].user}
cas.authn.pm.jdbc.password=${cas.authn.jdbc.query[0].password}
cas.authn.pm.jdbc.dialect=${cas.authn.jdbc.query[0].dialect}
cas.authn.pm.jdbc.driverClass=${cas.authn.jdbc.query[0].driverClass}
#密码修改加密规则,这个必须要和原始密码加密规则一致
cas.authn.pm.jdbc.passwordEncoder.type=${cas.authn.jdbc.query[0].passwordEncoder.type}
cas.authn.pm.jdbc.passwordEncoder.characterEncoding=${cas.authn.jdbc.query[0].passwordEncoder.characterEncoding}
cas.authn.pm.jdbc.passwordEncoder.encodingAlgorithm=${cas.authn.jdbc.query[0].passwordEncoder.encodingAlgorithm}
cas.authn.pm.jdbc.passwordEncoder.secret=${cas.authn.jdbc.query[0].passwordEncoder.secret}
#默认是false,不会提交update语句
cas.authn.pm.jdbc.autocommit=true

#是否开启问题回答
cas.authn.pm.reset.securityQuestionsEnabled=false

#####################自定义的配置#####################

 

4、修改Pom.xml文件,添加依赖

                <!--Add by gaopeng 添加辅助的依赖 -->
                <!-- 数据库驱动 -->
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>6.0.6</version>
                </dependency>

                <!--jdbc认证需要添加的,这个是cas的依赖包 -->
                <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-pm-jdbc</artifactId>
                    <version>${cas.version}</version>
                </dependency>
                <!--End by gaopeng -->

 

5、自定义密码加密类。

在下载的源码目录 src下增加自定义的密码加密类。

package com.hanchen.cas;

import java.security.MessageDigest;

import org.apache.commons.codec.binary.Base64;
import org.springframework.security.crypto.password.PasswordEncoder;

public class CustomPasswordEncoder implements PasswordEncoder {

    public String encode(CharSequence password) {
        try {
            // 给数据进行SHA-256加密
            MessageDigest md = MessageDigest.getInstance("SHA-256");
            byte[] digest = md.digest(password.toString().getBytes("UTF-8"));
            String encodePassword = new String(Base64.encodeBase64(digest));

            System.out.println("encode方法:加密前(" + password + "),加密后(" + encodePassword + ")");

            return encodePassword;
        } catch (Exception e) {
            return null;
        }
    }

    /**
     * 调用这个方法来判断密码是否匹配
     */
    @Override
    public boolean matches(CharSequence rawPassword, String encodePassword) {
        // 判断密码是否存在
        if (rawPassword == null) {
            return false;
        }
        // 通过SHA-256加密后的密码
        String pass = this.encode(rawPassword.toString());

        System.out.println(
                "matches方法:rawPassword:" + rawPassword + ",encodePassword:" + encodePassword + ",pass:" + pass);

        // 比较密码是否相等的问题
        return pass.equals(encodePassword);
    }
}

 

6、修改cas.war包下 WEB-INF\classes\services\HTTPSandIMAPS-10000001.json 这个文件,增加 http 表示允许 http 协议的客户端访问服务端。

posted @ 2020-02-27 11:40  gaopengpy  阅读(1727)  评论(0编辑  收藏  举报