CAS 4.2.5 配置密码MD5

此配置要求先配置了JDBC连接数据库,如果没连到数据库的,可能不一定能实现:

配置jdbc连接MySql:https://my.oschina.net/u/2541179/blog/757505

配置MD5需要修改deployerConfigContext.xml;

配置完JDBC时,有一段<alias> 如下:

<alias name="queryDatabaseAuthenticationHandler" alias="primaryAuthenticationHandler" />

将此项修改为:(注释掉,新加以下内容)

<bean id = "queryDatabaseAuthenticationHandler" name="primaryAuthenticationHandler" class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">	
	<property name="passwordEncoder" ref="MD5PasswordEncoder"/> 
</bean>

简单说明一下(大神请忽略):其实alias就是简写的bean,但是alias是不能加<property>的,所以给它修改成<bean>标签,【name=】变为【id=】 ,【alias=】 变为 【name=】,增加【class=】属性,至于class里的值是怎么来的,百度,谷歌,官方文档,读源码。。。。

然后property里配置的内容,需要增加以下的bean,进行匹配:

<bean id="MD5PasswordEncoder" class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">    
	<constructor-arg value="MD5"/>  
</bean>

ref 和 id 做对应。

这样保存后,重启tomcat就行了。有一点需要吐槽一下:

这样的配置是通过cas自带的MD5加密来进行加密的,有个十分恶心的bug,就是数据库中的MD5串必须是小写的字母,否则验证失败,读了一下源码:org.jasig.cas.authentication.handler.DefaultPasswordEncoder

private static final char[] HEX_DIGITS = {'0', '1', '2', '3', '4', '5', '6', '7', '8',
                                                '9', 'a', 'b', 'c', 'd', 'e', 'f'};

这里面都是小写字母,然后在:org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler

这个类里面做比对的时候并没有对两个比对项做大小写忽略,我们数据库的密码写的MD5Util把这块都变成大写了,然后就苦逼的调了半天,不知道为什么校验不过去,读了源码才知道怎么回事。

此处提供2个解决方案:

简单粗暴的:数据库里的md5改成小写字母。(→ _→|||)

高大上的:自定义加密类:

<bean id="MD5PasswordEncoder" class="xxx.xxx.MyMD5" autowire="byName">    
	<constructor-arg value="MD5"/>  
</bean>

然后把这个类编译成class,扔到cas里,或是打到原jar包中。

当然了,这个自定义加密类就不一定是MD5了,只要实现cas的 org.jasig.cas.authentication.handler.PasswordEncoder 接口,重写encode方法就行啦。

这个接口在:cas-server-core-api-authentication里面,感兴趣的写一个玩玩吧。。

转载于:https://my.oschina.net/u/2541179/blog/757559

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值