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加密规范的重写。