Tomcat中部署CAS
先部署CAS服务端
?
1.部署CAS服务器的WAR包
将cas-server-3.4.11-release.zip解压缩,把modules文件夹中的cas-server-webapp-3.4.11.war
文件拷贝到<TOMCAT_HOME>/webapps/下,改名为cas(这里的名字只是一种习惯,当然可以改成其他或不改),然后启动服务器,其会自动解压。
?
2. 修改CAS登录的用户库
CAS的默认设置是只要用户名和密码相同,即可进行登录成功,真正的系统用户名和密码相同的可能性极小,所以我们需要修改默认的设置。
主要的修改在deployerConfigContext.xml文件里
位置:<TOMCAT_HOME>/webapps/cas/WEB-INF。
?
首先找到
<bean />
?
注释该行,加入下面的bean,这里bean的class属性用到的是CAS服务器端封装的JDBC包cas-server-jdbc-3.0.5.jar里的QueryDatabaseAuthenticationHandler方法,所以要将此包拷贝到/WEB-INF下的lib中。(还需要将mysql-connector-java-5.1.14-bin.jar放到/WEB-INF下的lib中)
这里sql属性是从clientuser表中根据cas登陆名查找密码。
dataSource属性需要再添加一个bean,如下:
?
?3.在客户端访问http://localhost:8080/CasClient1/servlet/Test,第一次会跳转到cas服务器端进行用户名和密码的输入,以后就不用输入密码了。
?
?
问题汇总:
?
?严重: edu.yale.its.tp.cas.client.CASAuthenticationException: Unable to validate ProxyTicketValidator [[edu.yale.its.tp.cas.client.ProxyTicketValidator prox
yList=[null] [edu.yale.its.tp.cas.client.ServiceTicketValidator casValidateUrl=[https://192.168.1.111:8443/cas/proxyValidate] ticket=[ST-0-9h7Mx5HK3pfsdxRv
MD3y] service=[http%3A%2F%2F192.168.1.222%3A8080%2Fservlets-examples%2Fservlet%2FHelloWorldExample] renew=false]]]
这个CAS异常是从CAS Client里面抛出,是当我们不使用证书的CN去访问域名的时候(比如下文是用IP访问而且证书的CN是该IP对应的域名而非该IP),CASClient无法信任,也就是我上面特意提到的那个CN的问题。要特别注意。我这里的CN=wujay-PC?
?
INFO [org.jasig.cas.authentication.AuthenticationManager
Impl] - <AuthenticationHandler: cn.com.tiansky.cas.authenticationHandlers.UPAuthenticationHandler successfully authenticated the user which provided the followi
ng credentials: [username: test]>
就种错误,可能是客户端的那个配置文件里写的不太对。也就是上面说的第五步,要多注意一下。?
?
java.io.IOException: Cannot recover key
? ? ? ? at org.apache.tomcat.util.net.jsse.JSSE14SocketFactory.init(JSSE14Socket
Factory.java:125)
? ? ? ? at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESo
cketFactory.java:88)
? ? ? ? at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoi
nt.java:292)
? ? ? ? at org.apache.coyote.http11.Http11BaseProtocol.init(Http11BaseProtocol.j
ava:138)
? ? ? ? at org.apache.catalina.connector.Connector.initialize(Connector.java:101
?
这种错误,可能是你生成的证书有问题,如果keypass和storepass的密码不一致也会把这个错(不知为什么非要设成一样的)