CAS验证,基于cas的认证平台
本文以救生筏与国际体育仲裁法庭整合为例,将国际体育仲裁法庭登录验证从输入相同的用户名/密码定制为以救生筏的用户身份进行验证。
MySQL5
杰尔1.6.0.7
人的本质
8.04
与Tomcat 6.0捆绑的救生筏
国际体育仲裁法庭服务器3.3.1
耶鲁国际体育仲裁法庭客户端2.0.11
NetBeans IDE 6.1
在进行本文示例前,请参考这里。
新建工程
打开NetBeans IDE,新建爪哇
类库工程:PortalAuthHandler。
添加依赖包
从国际体育仲裁法庭中的解放运动下找到如下罐子:
落下服务器-核心-3.3 .罐子
inspektr-core-0.7.0.jar
下载弹簧芯罐(2.5.5),点这里。
将这三个冲突包添加到工程PortalAuthHandler下。
编写测试用例
在测试包下建立测试用例,代码如下:
包裹
com。jinfonet。开发商。门户网站;
进口
朱尼特。框架。测试用例;
进口
org。好的。中科院。正宗的。处理程序。密码编码器;
/**
*
*
@作者DL88250@gmail.com 88250号
*/
公众的
最终类base64密码编码测试扩展了测试用例{
私人的
最终密码密码=新密码
base64 password encoder(“SHA1”);
公众的
void testHashBase64Encoded() {
断言等于( quqp 5 cyxm 6 yctahz 05 hph 5 gvu 9m=,
这个。密码编码。编码(“测试”);
}
公众的
void testNullPassword() {
断言相等(空,
这个。密码编码。编码(空));
}
公众的
void testinvalidecodingtype(){
最后的
密码编码器PE=新的base64密码编码器(无效
编码);
尝试
{
体育。编码(“测试”);
失败(异常
预期。);
}
接住(最终异常e) {
返回;
}
}
}
这个测试用例有三个测试方法,其中HashBase64Encoded编码编码最为重要。因为在救生筏的帐户表用户_中的密码_字段默认是以SHA1进行加密,然后再以Base64进行编码存放的。而国际体育仲裁法庭中自带的密码
编码器只有用加密算法进行加密的步骤,没有Base64编码的步骤,所以我们要写一个带有Base64编码功能的编码器,且必须是实现
org。是的,西格。中科院。正宗的。处理程序。密码编码器接口的。
编写实现代码
包裹
com。jinfonet。开发商。门户网站;
进口
Java。io。unsupportedencodingexception
进口
Java。安全。消息摘要;
进口
Java。安全。nosuchalgorithm异常;
进口
org。inspektr。常见。国际奥委会。注释。不为空;
进口
org。好的。中科院。正宗的。处理程序。密码编码器;
进口
org。spring框架。util。字符串实用程序;
进口
星期日杂项base 64编码器;
/**
*
*
@作者DL88250@gmail.com 88250号
*/
公众的
base64密码编码器类实现密码编码{
私人的
static final char[]HEX _ DIGITS={ 0 , 1 , 2 , 3 , 4 , 5 ,
6,
7 , 8 , 9 , a , b , c , d , e , f
};
@NotNull
私人的
最终字符串编码算法;
私人的
字符串字符编码;
公众的
Base64PasswordEncoder(最终字符串编码算法){
这个。编码算法
=编码算法
}
公众的
字符串编码(最终字符串密码){
如果
(密码==空){
返回
空
}
尝试
{
消息摘要
消息摘要=消息摘要。getinstance(这个。编码算法);
如果
(字符串utils。hastext(这个。字符编码)){
消息摘要。更新(密码。getbytes(这个。字符编码));
}
否则{
消息摘要。更新(密码。getbytes());
}
最后的
byte[]digest=消息摘要。digest();
返回
getFormattedText(摘要);
}
catch(最终nosuch算法异常e){
扔
新的安全例外(e)和:
}
接住(最终不支持编码异常e) {
扔
新运行时异常(e);
}
}
/**
*
从摘要中提取原始字节,并将其正确格式化。
*
*
@param字节摘要中的原始字节。
*
@返回格式化的字节。
*/
私人的
string getFormattedText(byte[]bytes){
最后的
StringBuilder buf=新的StringBuilder(字节。长度* 2);
星期日杂项base64编码器
e=新的base 64编码器();
最后的
String buf2=e.encode(字节);
为
(int j=0;j字节。长度;j ) {
buf.append(HEX_DIGITS[(bytes[j
4)0x0f]);
buf.append(HEX_DIGITS[bytes[j]
0x0f]);
}
System.out.println(最终:
buf 2);
System.out.println(编码算法
: buf);
返回
buf 2。tostring();
}
公众的
最终void setCharacterEncoding(最终字符串字符编码){
this.characterEncoding编码编码
=字符编码;
}
}
注意:这里,我们使用了太阳的一个受限类:base64编码器。如果你自己有实现,尽量用自己的。
工程结构截图
工程的完整结构截图如下:
测试与打包
单元测通过后到工程目录下的距离目录下把建设出的冲突中的班级文件(与
包装)打包到$ LIFERAY _ HOME/web apps/cas-web/cas-server-core-3.3。冲突中。
启用定制后的登录验证
编辑$ LIFERAY _ HOME/WEB apps/cas-WEB/we b-INF/deployerconficontext。可扩展置标语言文件,将
bean /
替换为
豆
财产
name= SQL value= select password _ from User _ where
screenName=?/
财产
name=密码编码器 ref= base64密码编码器/
财产
name=数据源 ref=数据源/
/bean
注意:在救生筏中最好使用昵称作为国际体育仲裁法庭验证的用户名,电子邮件地址是不能用的,ID方式没经过测试。
然后,在紧跟的
/列表
/属性
/bean
后加入:
豆
id=dataSource
财产
名称=“驱动程序类名”值=“$ { db。驱动程序} /
财产
name=url value=${db.url} /
财产
name= username value= $ { db。用户名} /
财产
名称=“密码”值=“$ { db。密码} /
/bean
豆
id=base64PasswordEncoder
autowire=byName
构造函数参数
值=SHA1 /
/bean
最后,修改在文件$ LIFERAY _ HOME/WEB apps/cas-WEB/we b-INF/cas。性能中配置一下数据库连接,如下:
#数据库。冬眠。方言=org。冬眠。方言。甲骨文方言
数据库。冬眠。方言=org。冬眠。方言。MySQL方言
#数据库。冬眠。方言=org。冬眠。方言。hsql方言
db。driver=com。MySQL。JDBC。驾驶员
db。URL=JDBC:MySQL://localhost:3306/lportal?use unicode=true ampcharacterEncoding=UTF-8安培;useFastDateParsing=false
db。用户名=lportal
db.password=dl88250
启动救生筏与国际体育仲裁法庭后,登录救生筏(使用非Portlet)时将自动跳转到国际体育仲裁法庭验证页面,输入用户名(你的
屏幕名称)与密码后,如果登录成功,将自动跳转到你在救生筏的主页里。
本文以国际体育仲裁法庭与救生筏的整合为例,介绍了定制国际体育仲裁法庭登录验证的整个开发与配置过程,也强调了一些需要注意的地方。使用国际体育仲裁法庭实现单点登录(单身
登录)将在下一次的文章中介绍,将以国际体育仲裁法庭整合生命圣甲虫为例给大家介绍,请大家多多给予关注哦
: )
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。