简介
谈到单点登录(SSO:Single Sign On),最出名的框架,莫过于CAS(Central Authentication Service)
服务端:本系列文章全部基于目前最新的CAS-4.0.3
客户端:目前CAS的Java客户端官方最新版本是3.4.0,出于安全考虑应立即升级到该版本(它是在2015-07-21发布的)
注意:自从3.1.11开始,maven2的groupId已经变为org.jasig.cas.clien,如下所示
org.jasig.cas.client
cas-client-core
3.4.0
部署Tomcat
这里使用的环境为:jdk-7u80-windows-x64、apache-tomcat-8.0.21、cas-client-core-3.4.0、cas-server-webapp-4.0.3
首先,我们去下载CAS源码,手工构建cas.war,操作步骤如下
2、执行命令:C:\Users\Jadyer\Desktop\cas-4.0.3>mvn install -DskipTests
在构建最后,会报告下面的错误
Could not transfer artifact net.jradius:jradius-core:pom:1.0.0 from/to coova (http://coova-dev.s3.amazonaws.com/mvn): Software caused connection abort: recv failed
不过没关系,此时我们想要的war已经生成了,它就是\cas-4.0.3\cas-server-webapp\target\cas.war
接下来,将cas.war部署到Tomcat,启动后访问http://127.0.0.1:8080/cas/
关于登录密码,CAS-4.0之前的默认验证规则是:只要用户名和密码相同就认证通过
4.0之后有所改变:其默认用户名密码为casuser/Mellon,它配置在\WEB-INF\deployerConfigContext.xml
导入MyEclipse
1、MyEclipse中新建一个WebProject,名字随意,比方说cas(新建时JavaEE版本选5.0就行)
2、解压之前得到的cas.war,将其内容拷贝到新建的WebProject中即可(classes目录中的properties文件和log4j.xml拷到src即可)
验证一下:把这个WebProject发布到Tomcat,看到的应该是一样的效果
注意:导入时,这两个jar也是CAS的:person-directory-api-1.5.1.jar、person-directory-impl-1.5.1.jar
另外:cas.war中的\WEB-INF\classes\里面并没有class文件,实际上它是在\WEB-INF\lib\cas-server-*.jar四个jar里面的
如果也想导入它们的源码,可通过以下方式找到(如果你需要的话)
cas-server-security-filter-2.0.3.jar
cas-server-core-4.0.3.jar、cas-server-support-generic-4.0.3.jar、cas-server-webapp-support-4.0.3.jar
这三个jar的源码就在cas-4.0.3.zip里面,直接拷过来就行了
启用HTTP协议支持
我们都知道,Tomcat默认是没有开启HTTPS协议的
Non-secure Connection
You are currently accessing CAS over a non-secure connection. Single Sign On WILL NOT WORK. In order to have single sign on work, you MUST log in over HTTPS.
这段提示是硬编码在\WEB-INF\view\jsp\default\ui\casLoginView.jsp中的
我们可以注释掉它,也可以让CAS支持HTTP协议,即令其不开启HTTPS验证,这时需要修改三个文件
1、\WEB-INF\deployerConfigContext.xml
添加p:requireSecure="false"
2、\WEB-INF\spring-configuration\ticketGrantingTicketCookieGenerator.xml
p:cookieSecure="true"改为p:cookieSecure="false"
3、\WEB-INF\spring-configuration\warnCookieGenerator.xml
p:cookieSecure="true"改为p:cookieSecure="false"