2.4.1、背景
CAS服務和第三方進行對接,第三方使用的MD5加密規範爲64位,而CAS的MD5加密規範爲32位。因爲第三方數據庫中數據繁多,不便於進行修改。因此,需要修改CAS的加密規範爲MD5 64位。
2.4.2、操作
2.4.2.1、獲取cas-server-core -4.0.0.jar
打開CAS的Linux安裝目錄,在路徑/apache-tomcat-7.0.68/webapps/cas/WEB-INF/lib下,獲取cas-server-core-4.0.0.jar文件,將該文件下載到本地環境下。
2.4.2.2、獲取CAS的DefaultPasswordEncoder加密類
找到上一步下載到本地的cas-server-core-4.0.0.jar,右鍵該jar包,選擇提取到當前目錄選項。在解壓縮得到的文件夾,按照路徑org\jasig\cas\authentication\handler依次打開,顯示如圖2.4.2.2.1所示:
圖2.4.2.2.1
我們要重寫DefaultPasswordEncoder類,該接口實現了PasswordEncoder接口,因此在重寫類的時候需要導入該接口。
使用反編譯工具分別將這兩個.class文件反編譯成.java文件,這兩個java文件會在下一步用到。
2.4.2.3、重寫CAS的DefaultPasswordEncoder加密類
在eclipse或myEclipse中創建WebService Project工程,工程名隨意。在該工程下創建名爲org.jasig.cas.authentication.handler的包。在該包下創建一個名爲PasswordEncoder的接口,創建一個名爲DefaultPasswordEncoder的類。將2.4.2.2反編譯獲取的java文件內容依次複製到新創建的類中。
重寫DefaultPasswordEncoder類,新增EncoderPwdByMd5方法,重寫encode方法重寫後的內容如下所示:
package org.jasig.cas.authentication.handler;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import sun.misc.BASE64Encoder;
publicclassDefaultPasswordEncoder implements PasswordEncoder{
//生成MD5
publicstaticfinal StringEncoderPwdByMd5(String str)
{
String newstr = "";
try
{
MessageDigest md5 = MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
newstr =base64en.encode(md5.digest(str.getBytes("utf-8")));
}
catch (NoSuchAlgorithmException e)
{
e.printStackTrace();
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
}
return newstr;
}
@Override
public String encode(StringparamString) {
// TODO Auto-generated method stub
return EncoderPwdByMd5(paramString);
}
privatestaticfinalchar[] HEX_DIGITS = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
privatefinalString encodingAlgorithm;
private String characterEncoding;
public DefaultPasswordEncoder(String encodingAlgorithm)
{
this.encodingAlgorithm = encodingAlgorithm;
}
private String getFormattedText(byte[] bytes)
{
StringBuilder buf = new StringBuilder(bytes.length * 2);
for (int j = 0; j < bytes.length; j++)
{
buf.append(HEX_DIGITS[(bytes[j] >> 4 & 0xF)]);
buf.append(HEX_DIGITS[(bytes[j] & 0xF)]);
}
return buf.toString();
}
publicfinalvoidsetCharacterEncoding(String characterEncoding)
{
this.characterEncoding = characterEncoding;
}
static {}
}
保存修改後的類。
2.4.2.4、修改cas-server-core-4.0.0.jar
打開eclipse/myeclipse的workspace,如圖2.4.2.4.1所示
圖2.4.2.4.1
選定你在2.4.2.3創建的Web Service Project工程,例如,我的工程名爲test1,然後依次打開如下路徑:\WebRoot\WEB-INF\classes\org\jasig\cas\authentication\handler。顯示如圖2.4.2.4.2所示:
圖2.4.2.4.2
保留該窗口,下一步要用。
找到2.4.2.1下載的cas-server-core-4.0.0.jar,右鍵該jar包,選擇打開壓縮文件選項,彈出如圖2.4.2.4.3所示頁面
圖2.4.2.4.3
按照路徑org\jasig\cas\authentication\handler\ 依次打開,顯示如圖2.4.2.4.4所示:
圖2.4.2.4.4
將圖2.4.2.4.2中的DefaultPasswordEncoder.class文件拖動到圖2.4.2.4.4中,拖動完後關閉圖2.4.2.4.4窗口
2.4.2.5、發佈修改後的cas-server-core-4.0.0.jar
打開CAS的Linux安裝目錄,在路徑/apache-tomcat-7.0.68/webapps/cas/WEB-INF/lib下,用修改後的cas-server-core-4.0.0.jar文件覆蓋該路徑下原來的cas-server-core-4.0.0.jar,重啓服務。完成了對CAS MD5加密規範的重寫。