在内部管理系统中,我们需要进行单点登陆来统一管理所有子系统的入口。最终我们选用了耶鲁大学的cas系统来作为单点登陆的服务器。
现在先来说下如何部署cas系统
前置条件:
java版本:1.7.0_15
cas服务器版本:4.0.0
配置的cas服务器域名为 sso.xxx.com
cas服务器下载地址:http://developer.jasig.org/cas/
具体步骤如下:
一、生成证书并配置tomcat
1、生成证书
在cmd中使用下面java的keytool 来生成证书
生成到D盘的security目录
keytool -genkey -alias sso.xxx.com -keyalg RSA -keystore d:/security/xxx-sso -validity 1000 -dname "CN=sso.xxx.com, OU=xxx, O=xxx, L=guangzhou, ST=guangdong, C=ZH"
会依次输出下列内容
输入密钥库口令:
再次输入新口令:
输入 的密钥口令
(如果和密钥库口令相同, 按回车):
我使用的密码是 000000
2、导出证书
导出证书crt文件到D盘的security目录
keytool -export -file d:/security/xxx-sso.crt -alias sso.xxx.com -keystore d:/security/xxx-sso
3、为客户端的jvm导入证书 jvm的cacerts默认秘钥为changeit
keytool -import -keystore "%JAVA_HOME%\jre\lib\security\cacerts" -file D:/security/xxx-sso.crt -alias sso.xxx.com -storepass changeit
4、配置tomcat
因为cas是使用https协议进行传输的,需要配置tomcat对8443的支持
在tomcat的web.xml配置8443端口
<Connector port="8443" protocol="HTTP/1.1" scheme="https" secure="true" sslProtocol="TLS"
SSLEnabled="true" clientAuth="false" keystoreFile="D:/security/xxx-sso" keystorePass="000000" maxThreads="150" />
二、生成cas服务器的maven项目
1、新建maven web项目,命名为xxx-cas-server
2、把cas-server-webapp-4.0.0下的所有内容拷贝到webapp目录下
3、把cas-server-webapp-4.0.0/WEB-INF/classes下的所有文件拷贝到src/main/sources目录
这是因为部署之后的classes下的文件是会被删除的,只有放在这个目录才能保证部署时在classes目录下。
4、把classes/lib下的jar包都添加到classpath中
5、修改登陆验证实现类
cas的登陆deployerConfigContext.xml中的primaryAuthenticationHandler来配置登陆实现类。因此,我们需要实现AbstractUsernamePasswordAuthenticationHandler这个抽象类来实现自己的逻辑,我是用了AD域的验证方式来进行验证的。
public class ADAuthenticationHandler extends AbstractUsernamePasswordAuthenticationHandler {
@Override
protected HandlerResult authenticateUsernamePasswordInternal(
UsernamePasswordCredential credential) throws GeneralSecurityException,
PreventedException {
String userName = credential.getUsername();
String password = credential.getPassword();
boolean loginSuccess = userName.equals("xxx") && password.equals("xxx");
if (loginSuccess) {
return createHandlerResult(credential, new SimplePrincipal(userName), null);
} else {
throw new FailedLoginException();
}
}
}
修改deployerConfigContext.xml中的primaryAuthenticationHandler指向到上面的类:
<bean id="primaryAuthenticationHandler" class="com.xxx.cas.authentication.ADAuthenticationHandler"></bean>
三、部署tomcat
把第二步中的cas-server项目部署到第一步中的tomcat中,启动。
通过网址https://sso.xxx.com:8443/访问可以看到cas的登陆页面