热门搜索 :
考研考公
您的当前位置:首页正文

CAS扩展——自定义加密算法

来源:伴沃教育
CAS扩展——⾃定义加密算法

问题由来

⽤于CAS系统登录的密码默认提供MD5和SHA加密的算法⽀持,但有时由于业务需要,以上两种算法都不能提供⾜够的⽀持,这时我们就需要⾃定义加密算法。⽐如笔者遇到的⼀个项⽬,密码的加密⽅式,是将密码MD5加密后再拼接数据库中⼀个盐值然后再MD5⼆次加密,这样的需求条件就必须对加密算法进⾏扩展。

解决⽅案

CAS⽀持的加密⽅式(MD5/SHA)配置⽅法:

在tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml先找到:

1:

修改为:

1: 2:

3: 4: 5:

QueryDatabaseAuthenticationHandler是cas-server-support-jdbc提供的查询接⼝其中⼀个是通过配置⼀个 SQL 语句查出密码,与所给密码匹配;dataSource是使⽤JDBC查询时的数据源;sql语句的⽤意是把符合该ID的⽤户密码取出来,cas会⽤它与⽤户输⼊的密码进⾏⽐对。passwordEncoder是加密算法,表⽰将⽤户输⼊的密码以何种⽅式进⾏加密,然后CAS会将此加密结果与数据库中取出来的密码进⾏⽐对。

最后在tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml末尾配置:

1: 2: oracle.jdbc.driver.OracleDriver 3: jdbc:oracle:thin:@192.168.2.233:1521:ora11g 4: username 5: password 6: 7:

8: 9: 10: MD5 11: 12: ⾄此⽀持MD5加密的CAS登录配置就完成了。从上⾯分析我们可以看到,加密算法的配置是在:

1: 2: 3: MD5 4: 5:

也就是说我们只需要⾃定义⼀个加密类,将它装配进来就可以了,于是我们新建⼀个类(注意此类应该实现CAS的PasswordEncoder接⼝):

1: public class UCPasswordEncoder implements PasswordEncoder { 2: private String salt; 3:

4: /**

5: * @return the salt 6: */

7: public String getSalt() { 8: return salt; 9: } 10:

11: /**

12: * @param salt

13: * the salt to set 14: */

15: public void setSalt(String salt) { 16: this.salt = salt; 17: } 18:

19: public String encode(final String password) {

20: return EncryptUtil.getMD5Str(EncryptUtil.getMD5Str(password) + salt); 21: }

22: 23: }

当中的salt是从数据库中取出来的⼀个盐值,该值会在另⼀个⾃定义的数据库验证类中取到并传递给UCPasswordEncoder,在此不再阐述。

EncryptUtil.getMD5Str(EncryptUtil.getMD5Str(password) + salt),也就是笔者项⽬要使⽤的加密算法(MD5结果+盐值,再MD5加密)。最后修改tomcat/webapp/cas/WEB-INF/deployerConfigContext.xml加密算法的配置:

1: 2: class=\"com.cnblogs.leefreeman.sso.UCPasswordEncoder\" 3: autowire=\"byName\"> 4:

这样⾃定义加密算法的实现就完成了。

因篇幅问题不能全部显示,请点此查看更多更全内容

Top