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 協議的客戶端訪問服務端。