概述
现在企业内部的系统越来越多,如果各个应用都有自己的用户系统,那么用户将不得不要记住不同系统的用户名密码,因此独立的用户系统应运而生,各个系统之间通过单点登录的方式,这样内部只需要记住一个用户名和密码,就可以自由的访问有权限的系统。
单点登录的实现
1.我们采用cas server 实现单点登录,下载地址是:
http://developer.jasig.org/cas/cas-server-4.0.0-release.zip
2.CAS 配置修改
将包解压,我们可以看到如下目录

将war 文件进行解压。
1.去掉https验证。
CAS 默认认证方式使用的是HTTPS协议,一般对安全性不高的话建议取消改成HTTP方式。因为,开启的话会经常提示证书过期、需要用户确认等,对客户的感知不好,当前有需要的可以开启。
打开 cas-serverWEB-INFdeployerConfigContext.xml 文件 ,找到如下配置:
改成:
打开 cas-serverWEB-INFspring-configurationicketGrantingTicketCookieGenerator.xml ,找到如下配置:
改成:
打开 cas-serverWEB-INFspring-configurationwarnCookieGenerator.xml ,找到如下配置
改成
2.修改成数据库验证用户
在默认情况下,cas使用了固定用户进行登录,我们需要改成数据库用户的验证。
我们目前产品中使用了多租户的SAAS模式,因此用户名 为 帐号加 域名的形式 如 admin@mycine.cn
我们做如下修改:
1.在 WEB-INF 增加 数据库连接池的jar和 mysql驱动的jar包。
mysql-connector-java-5.1.34.jar
druid-1.0.26.jar
2.打开配置文件
WEB-INF/deployerConfigContext.xml
增加数据源配置:
修改验证方式:
这里SQL 我们自己定义。
修改密码加密方式
修改成 sha256的方式进行hash。
importjava.security.MessageDigest;importorg.apache.commons.codec.binary.Base64;importorg.jasig.cas.authentication.handler.PasswordEncoder;public class MyPasswordEncoder implementsPasswordEncoder {
@OverridepublicString encode(String pwd) {
String encPwd=encryptSha256(pwd);returnencPwd;
}privateString encryptSha256(String inputStr) {try{
MessageDigest md= MessageDigest.getInstance("SHA-256");byte digest[] = md.digest(inputStr.getBytes("UTF-8"));return newString(Base64.encodeBase64(digest));
}catch(Exception e) {return null;
}
}
}
修改QueryDatabaseAuthenticationHandler代码。

红框部分是修改的地方。
增加属性配置:
修改 WEB-INF/cas.properties 文件
增加配置如下:
db.url=jdbc:mysql://localhost:3306/mycine?useUnicode=true&characterEncoding=utf-8
db.username=root
db.password=root
db.minimumConnectionCount=10db.maximumConnectionCount=20
这样cas 就支持使用数据库进行用户验证了。
2911

被折叠的 条评论
为什么被折叠?



