搭建單點登錄系統之二:完善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 協議的客戶端訪問服務端。


免責聲明!

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



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