参照网址
参照网址
server代码地址
client1代码地址
client2代码地址
之前一直是server端登录验证。所谓单点登录(SSO),只当企业用户同时访问多个不同(类型的)应用时,他们只需要提供自身的用户凭证信息(比如用户名/密码)一次,当用户在不同的应用间切换时,他们不用再重复地输入自身的用户凭证了。所以此章写一下cas如何整合客户端
#cas服务端
127.0.0.1 server.guangyuanbj.com
#客户端1
127.0.0.1 client1.guangyuanbj.com
#客户端2
127.0.0.1 client2.guangyuanbj.com
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^(https|imaps|http)://.*",
"name" : "web",
"id" : 10000001,
"description" : "所有的https或者http访问都允许通过",
"evaluationOrder" : 100
}
注意:services目录中可包含多个JSON文件,其命名必须满足以下规则: n a m e − {name}- name−{id}.json,id必须为json文件中内容id一致。
因为在CAS服务中,默认是提供了默认的Service配置项,所以如果添加的Json配置没起作用,可以尝试注释掉默认启动Json,在pom.xml文件里面进行配置,如下:
org.apache.maven.plugins
maven-war-plugin
2.6
cas
false
false
false
${project.build.directory}/war/work/org.apereo.cas/cas-server-webapp${app.server}/META-INF/MANIFEST.MF
org.apereo.cas
cas-server-webapp${app.server}
**/services/*.json
#注册客户端
# 开启识别Json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
cas.serviceRegistry.schedule.repeatInterval=120000
#延迟15秒开启
cas.serviceRegistry.schedule.startDelay=15000
# Json配置
cas.serviceRegistry.json.location=classpath:/services
cas.serviceRegistry.managementType=DEFAULT
cas.logout.followServiceRedirects=true
org.apereo.cas
cas-server-support-json-service-registry
${cas.version}
至此 cas server端配置完成
下载官方提供的CAS Java客户端,cas-sample-java-webapp
org.apache.tomcat.maven
tomcat7-maven-plugin
2.2
8081
UTF-8
tomcat7
/
将自带的jetty插件注释
客户端2的配置类似,只要将其中的http://client1.guangyuanbj.com:8081修改为http://client2.guangyuanbj.com:8082
cas-app
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
CAS Single Sign Out Filter
org.jasig.cas.client.session.SingleSignOutFilter
casServerUrlPrefix
https://server.guangyuanbj.com:8443/cas
CAS Single Sign Out Filter
/*
CAS Filter
org.jasig.cas.client.authentication.AuthenticationFilter
casServerLoginUrl
https://server.guangyuanbj.com:8443/cas/login
serverName
http://client1.guangyuanbj.com:8081
CAS Filter
/*
CAS Validation Filter
org.jasig.cas.client.validation.Cas30ProxyReceivingTicketValidationFilter
casServerUrlPrefix
https://server.guangyuanbj.com:8443/cas
serverName
http://client1.guangyuanbj.com:8081
CAS Validation Filter
/*
CAS HttpServletRequest Wrapper Filter
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
CAS HttpServletRequest Wrapper Filter
/*
CAS Assertion Thread Local Filter
org.jasig.cas.client.util.AssertionThreadLocalFilter
CAS Assertion Thread Local Filter
/*
当前为客户端2
客户端1
客户端2
浏览器输入http://client1.guangyuanbj.com:8081会调转到https://server.guangyuanbj.com:8443/cas/login页面,但是重定向回client1时报证书找不到
该问题网上都说是客户端jdk未导入证书导致的,但是我服务端和客户端是在同一台电脑上配置的,之前jdk就导入了证书
一直没有找到原因,很纳闷哪里有问题呀
因公司也只是局域网使用单点登录,所以暂时考虑去掉SSL步骤如下:
参考网址
1、服务端的Tomcat改回普通的http Connector访问,比如用原来的8080端口配置方式。
2、建议从客户端jre的证书仓库中删掉之前为做HTTPS单点登录加的那个证书:
keytool -delete -alias cas -keystore C:/Java/jdk1.8.0_91/jre/lib/security/cacerts
做完这两步还不够,你会发现每个客户端的访问虽然都需要登录服务端,但是彼此的登录状态是不互通的。所以还有第三步
3、在application.properties里加上这么一句:
cas.tgc.secure=false
如果登录状态还是不互通,请清空浏览器的cookie,重开浏览器试试。