更新hosts
192.168.0.116 www.jacky.sso.com
127.0.0.1 mmoayyed.unicon.net
测试服务转发
输入具体地址https://www.jacky.sso.com:8443/cas/login?service=http://localhost:9080/sample,进行登录,输入用户名、密码登录成功!然后跳转到一个http://localhost:9080/sample?ticket=xxxxxxxxxxxxxx的地址。
后面接入的就是指具体的服务地址。说明先前的配置是其作用的,因为配置了http通过服务认证。
若不能转发则需要配置服务访问策略。
服务访问策略
解压cas.war文件,可以找到org/WEB-INF/classes/services,将services目录复制到cas-gradle-overlay-template中的resources目录中,可以添加一个json文件,如下:Localhost-10000003.json
{
"@class" : "org.apereo.cas.services.RegexRegisteredService",
"serviceId" : "^http://127\\.0\\.0\\.1.*",
"name" : "web",
"id" : 10000003,
"evaluationOrder" : 1
}
以上内容就是允许http:127.0.0.1的访问。
新增一个json文件:
文件名按照规范用name-serviceId.json
- @class:必须为org.apereo.cas.services.RegisteredService的实现类
- serviceId:对服务进行描述的表达式,可用于匹配一个或多个 URL 地址
- name: 服务名称
- id:全局唯一标志
- evaluationOrder:定义多个服务的执行顺序
同时在application.properties里添加如下内容,开启服务端对json配置的读取:
#开启识别json文件,默认false
cas.serviceRegistry.initFromJson=true
#自动扫描服务配置,默认开启
cas.serviceRegistry.watcherEnabled=true
#120秒扫描一遍
cas.serviceRegistry.schedule.repeatInterval=120000
#延迟15秒开启
cas.serviceRegistry.schedule.startDelay=15000
#资源加载路径
cas.serviceRegistry.json.location=classpath:/services
注意,这里的配置网上很多资料都不对,配置错误服务无法启动,请参考官网service-registry
还要添加依赖,如下:
compile "org.apereo.cas:cas-server-support-json-service-registry:5.3.2"
然后重新打包cas.war并部署。
下载官方demo
官方提供了一个简单的CAS Client供测试使用,可以直接下载cas-sample-java-webapp
配置cas项目
然后导入idea中,只需要改变web.xml,如下:
casServerLoginUrl是配置cas-server地址,serverName是登录成功后转发的地址。
在pom.xml文件中添加tomcat plugin,可以方便的启动服务,如下:
<!-- tomcat7 plugin -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<httpsPort>8443</httpsPort>
<keystoreFile>D:/mine12-6/cas/tomcat.keystore</keystoreFile>
<keystorePass>123456</keystorePass>
<port>8083</port>
<path>/cas</path>
<uriEncoding>utf-8</uriEncoding>
</configuration>
</plugin>
同时配置https,将Server配置中的tomcat.keystore文件复制到当前目录并添加以上路径和密码。
启动服务: mvn tomcat7:run
这样可以方便的启动并访问服务,如:https://mmoayyed.unicon.net:8443/cas/
或http://mmoayyed.unicon.net:8083/cas/
当访问服务时,请求会被web.xml配置的cas filter所拦截,若发现没有登录票据就会被转发到cas-server去登录,然后输入账号和密码登录完成后,就会被再次转发回来。
转发回来时,一般会遇到2种问题,一是unable to find valid certification path to requested target
异常,二是未认证授权的服务
,如下图:
转发时异常处理一
关于异常unable to find valid certification path to requested target
, 是因为jre里也需要查找相应的认证证书。
注意,在上一篇文章中,已讲过生成客户端密钥库文件,就是把密钥文件导入到jre中,若是导入后还是报异常,可以试下下面的另一种办法。
转发时异常处理二
1、 下载InstallCert.java:InstallCert.java
2、 编译:javac InstallCert.java
3、 运行:java InstallCert localhost:8443,当提示Enter certificate to add to trusted keystore or 'q' to quit: [1]时,输入1,回车
4、 再次运行java InstallCert localhost:8443,提示如下即无误。
5、 复制InstallCert.java目录下的jssecacerts文件至你的%JAVA_HOME%/jre/lib/security目录下即可。
注意:如果你在其他地方下载了InstallCert.java ,在jdk7下面可能会出现这样的错误,
javax.net.ssl.SSLException: java.lang.UnsupportedOperationException
如果出现这样的错误,直接修改InstallCert.java
@Override
public X509Certificate[] getAcceptedIssuers() {
return new X509Certificate[0];
// throw new UnsupportedOperationException();注释该行,用上面这行替代即可
}
当然,你可以直接在上面下载使用。
6、 如果以上操作成功后,在idea里还是报unable to find valid certification path to requested target错,那么请检查你的idea使用的jdk是否是系统JAVA_HOME的jdk,若不是,修改即可。
当异常处理完毕后,再次访问,则应该出现以下界面了。
至此,cas-client终于与cas-server连接成功。