SSO之CAS单点登录实例演示

本文目录:

  • 一、概述
  • 二、演示环境
  • 三、JDK安装配置
  • 四、安全证书配置
  • 五、部署CAS-Server相关的Tomcat
  • 六、部署CAS-Client相关的Tomcat
  • 七、 测试验证SSO

一、概述

此文的目的就是为了帮助初步接触SSO和CAS 的人员提供一个入门指南,一步一步演示如何实现基于CAS的单点登录。

CAS的官网:http://www.jasig.org/cas

二、演示环境

本文演示过程在同一个机器上的(也可以在三台实体机器或者三个的虚拟机上),环境如下:

  • windows7 64位,主机名称:michael-pc
  • JDK 1.6.0_18
  • Tomcat 6.0.29
  • CAS-server-3.4.11、CAS-client-3.2.1
根据演示需求,用修改hosts 文件的方法添加域名最简单方便(这个非常重要),在文件 C:\Windows\System32\drivers\etc\hosts 文件中添加三条

  • demo.micmiu.com  =>> 对应部署cas server的tomcat,这个虚拟域名还用于证书生成
  • app1.micmiu.com  =>>  对应部署app1 的tomcat
  • app2.micmiu.com   =>> 对应部署app2 的tomcat

三、JDK安装配置

这个详细过程就不在描述,如果是免安装版的,确保环境变量配置正确。

本机环境变量:JAVA_HOME=D:\jdk,如果看到以下信息则表示安装成功:

四、安全证书配置

有关keytool工具的详细运用见:http://www.micmiu.com/lang/java/keytool-start-guide/

4.1. 生成证书:

ps:

  • 截图中需要输入的姓名和上面hosts文件中配置的一致;
  • keypass 和 storepass 两个密码要一致,否则下面tomcat 配置https 访问失败;

4.2.导出证书:

4.3.客户端导入证书:

ps:该命令中输入的密码和上面输入的不是同一个密码;如果是多台机器演示,需要在每一台客户端导入该证书

五、部署CAS-Server相关的Tomcat

5.1. 配置HTTPS

解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为 G:\sso\tomcat-cas,在文件 conf/server.xml文件找到:

修改成如下:

参数说明:

  • keystoreFile 就是4.1中创建证书的路径
  • keystorePass 就是4.1中创建证书的密码

5.2. 验证HTTPS配置
其他按照默认配置不作修改,双击%TOMCAT_HOME%\bin\startup.bat 启动tomcat-cas 验证https访问配置:


如果看到上述界面表示https 访问配置成功。

5.3 部署CAS-Server
CAS-Server 下载地址:http://www.jasig.org/cas/download
本文以cas-server-3.4.11-release.zip 为例,解压提取cas-server-3.4.11/modules/cas-server-webapp-3.4.11.war文件,把改文件copy到 G:\sso\tomcat-cas\webapps\ 目下,并重命名为:cas.war.
启动tomcat-cas,在浏览器地址栏输入:https://demo.micmiu.com:8443/cas/login ,回车

CAS-server的默认验证规则:只要用户名和密码相同就认证通过(仅仅用于测试,生成环境需要根据实际情况修改),输入admin/admin 点击登录,就可以看到登录成功的页面:

看到上述页面表示CAS-Server已经部署成功。

六、部署CAS-Client相关的Tomcat

6.1Cas-Client 下载

CAS-Client 下载地址:http://downloads.jasig.org/cas-clients/

以cas-client-3.2.1-release.zip 为例,解压提取cas-client-3.2.1/modules/cas-client-core-3.2.1.jar

借以tomcat默认自带的 webapps\examples 作为演示的简单web项目

6.2 安装配置 tomcat-app1

解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为 G:\sso\tomcat-app1,修改tomcat的启动端口,在文件 conf/server.xml文件找到如下内容:

修改成如下:

启动tomcat-app1,浏览器输入 http://app1.micmiu.com:18080/examples/servlets/ 回车:

看到上述界面表示tomcat-app1的基本安装配置已经成功。

接下来复制 client的lib包cas-client-core-3.2.1.jar到 tomcat-app1\webapps\examples\WEB-INF\lib\目录下, 在tomcat-app1\webapps\examples\WEB-INF\web.xml 文件中增加如下内容:

有关cas-client的web.xml修改的详细说明见官网介绍:

https://wiki.jasig.org/display/CASC/Configuring+the+Jasig+CAS+Client+for+Java+in+the+web.xml

6.3 安装配置 tomcat-app2

解压apache-tomcat-6.0.29.tar.gz并重命名后的路径为 G:\sso\tomcat-app2,修改tomcat的启动端口,在文件 conf/server.xml文件找到如下内容:

修改成如下:

启动tomcat-app2,浏览器输入 http://app2.micmiu.com:28080/examples/servlets/ 回车,按照上述6.2中的方法验证是否成功。

同6.2中的复制 client的lib包cas-client-core-3.2.1.jar到 tomcat-app2\webapps\examples\WEB-INF\lib\目录下, 在tomcat-app2\webapps\examples\WEB-INF\web.xml 文件中增加如下内容:

七、 测试验证SSO

启动之前配置好的三个tomcat分别为:tomcat-cas、tomcat-app1、tomcat-app2.

7.1  基本的测试

预期流程: 打开app1 url —-> 跳转cas server 验证 —-> 显示app1的应用 —-> 打开app2 url —-> 显示app2 应用 —-> 注销cas server —-> 打开app1/app2 url —-> 重新跳转到cas server 验证.

打开浏览器地址栏中输入:http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample,回车:

跳转到验证页面:

验证通过后显示如下:

此时访问app2就不再需要验证:

地址栏中输入:https://demo.micmiu.com:8443/cas/logout,回车显示:

上述表示 认证注销成功,此时如果再访问 : http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample 或 http://app2.micmiu.com:28080/examples/servlets/servlet/HelloWorldExample 需要重新进行认证。

7.2  获取登录用户的信息

修改类:webapps\examples\WEB-INF\classes\HelloWorldExample.java 后重新编译并替换 webapps\examples\WEB-INF\classes\HelloWorldExample.class文件。

 HelloWorldExample.java 修改后的代码如下:

再进行上述测试显示结果如下:

http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample :

http://app2.micmiu.com:28080/examples/servlets/servlet/HelloWorldExample

从上述页面可以看到通过认证的用户名。

到此已经全部完成了CAS单点登录实例演示。

原创文章,转载请注明: 转载自micmiu – 软件开发+生活点滴[ http://www.micmiu.com/ ]

本文链接地址: http://www.micmiu.com/enterprise-app/sso/sso-cas-sample/

发表评论?

116 条评论。

  1. 属性ame少了一个字母,因该是name.提示一下

  2. tomcat-app1 tomcat-app2 配置web.xml 访问example就是404

  3. 我的为什么导入成过后输入网址https://demo.micmiu.com/ 直接弹出个登录框!https://demo.micmiu.com:8443 则不能访问

  4. javac -classpath lib/servlet-api.jar:webapps/examples/WEB-INF/lib/cas-client-core-3.3.3.jar webapps/examples/WEB-INF/classes/HelloWorldExample.java
    webapps/examples/WEB-INF/classes/HelloWorldExample.java:55: 错误: 不是语句
    Map<Object, Object> attMap = assertion.getAttributes();
    楼主你好~,怎么编译修改后的HelloWorldExample.java文件 ?

  5. 请问为什么我配置完web.xml就访问不了examples/servlets了,没有配置之前是可以的,不输入examples可以看见tomcat页面

  6. 楼主,你好,请问导入证书的时候输入的changeit密码在哪里设置过,时默认密码吗

  7. Assertion assertion = (Assertion) request.getSession().getAttribute(
    AbstractCasFilter.CONST_CAS_ASSERTION);为什么我这个获取的是null 🙁 🙁 🙁

  8. 你好,能否问下呢,我总是出现ssl链接错误这个错误,我没有安装证书,使用的是http协议,没有使用https这个协议,总是报ssl链接错误,博主,知道的能否提示下。

  9. java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: Received fatal alert: handshake_failure

    被这个问题整疯的了。。。。好几天了,死活过不去,jdk,jre卸载重装好几遍,证书反复做了好几遍,换了新电脑又做了好几遍,死活出这个错!! HELP!HELP!HELP!..

  10. 楼主你好,请问为什么我获取用户名时request.getRemoteUser()为null

  11. 真心感谢博主,解决大问题了。
    我在搭的过程中问题主要出在key文件、cas-client-3.2.1-release.zip 中cas-client-3.2.1/modules/cas-client-core-3.2.1.jar这个jar文件上。我图省事儿直接去cas-server-webapp-3.4.2.1.war项目下找到了一个cas-client-core-3.1.10.jar放在了项目lib下,然后就出错了。所以建议初学者严格跟着博主的步骤来。。。

  12. 输入https://demo.micmiu.com:8443/访问的时候无法显示是配置问题吗?

  13. 如果app2是restfulapi,app1和app2都在CAS下实现SSO,
    app1中通过ajax调用app2,那么该如何做呢?

  14. 好不容易配置下来了。
    配置信息:
    Server version: Apache Tomcat/7.0.57
    Server built: Nov 3 2014 08:39:16 UTC
    Server number: 7.0.57.0
    OS Name: Linux
    OS Version: 3.11.0-18-generic
    Architecture: amd64
    JVM Version: 1.7.0_51-b13
    JVM Vendor: Oracle Corporation

    这个版本需要lib包 slf4j-api-1.7.1.jar 解决开始的404问题,看到上面提到的都是缺少commons-logging-1.1.jar,所以可能不用版本所需的包不同,可以查看tomcat日志获取相应缺失信息。

    最后修改HelloWorldExample.java后编译,需要保证目录下用户有写权限。然后用javac -classpath lib/servlet-api.jar:webapps/examples/WEB-INF/lib/cas-client-core-3.3.3.jar webapps/examples/WEB-INF/classes/HelloWorldExample.java 编译。注意事项:-classpath之间多个jar用英文冒号隔开,小菜我这里搞了好久。

    这是我半天多搞环境的个人分享,希望对后面配置的小伙伴们有帮助。

  15. 楼主你好!请问这句话是什么意思?修改类:webapps\examples\WEB-INF\classes\HelloWorldExample.java 后重新编译并替换 webapps\examples\WEB-INF\classes\HelloWorldExample.class文件。我把\HelloWorldExample.java文件按照您说的重新编译后,该怎么替换HelloWorldExample.class文件?

  16. 服务器端必须要有域名吗?仅有ip可以吗

  17. 请问一下, 😛 这个能否实现跨域单点登录?

  18. no proxy ticket found for [].

  19. 楼主您好,按照您的部署,我能从app1跳转至cas登录界面,但是登录成功后不能跳转回app1,黑窗口显示信息:NO Proxy Ticket found for [].楼请问楼主知道原因吗?

  20. 启动tomcat时这个错,严重: Exception starting filter CAS Single Sign Out Filter
    java.lang.IllegalArgumentException: casServerUrlPrefix cannot be null. 明明app1的web.xml 配置这个可以访问的。

  21. web.xml 文件中增加内容后,7.1 访问测试 http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample 404 啊,请问怎么解决

  22. 非常感谢楼主的分享,另外谢谢楼下的各位评论

  23. java.lang.RuntimeException: java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    楼主,打开http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample 后输入用户名和密码报这个错误是什么问题,证书也生成第二次了,在部署服务端是没问题的。

  24. 🙁 为啥我配置第一个tomcat是访问http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample 报404 没日志输出,访问http://app1.micmiu.com:18080/examples/servlets/侧可以访问

  25. 楼主,你好。我在安装配置 tomcat-app1的时候没有问题,但在配置 tomcat-app2时遇到了问题,在没有修改web.xml之前,可以访问http://app2.micmiu.com:28080/examples/servlets/,但在web.xml添加单点登录的代码之后,就不能访问了,catalina日志中报的错是:“ org.apache.catalina.core.StandardContext startInternal
    SEVERE: Error filterStart”,localhost日志中有一句:“org.apache.catalina.core.StandardContext filterStart
    SEVERE: Exception starting filter CAS Single Sign Out Filter”,但是我对照了app1和app2的web.xml内容,只是端口和应用名不一样,其它没有问题。到底是哪出问题了呢?

    • 错误提示 是CAS的SSO的filter 启动失败了,这个原因一般有两中情况:1.配置错误 2.缺少lib(logger之类)包,你帖出的错误信息不全 无法判断。
      你还可以测试下把app1停了就app2试试或者把app1全部复制一遍修改下端口作为app2 再试试

  26. 正文6.3 出。 shutdown 端口也必须修改。
    默认是 8005 ,建议设置为18005

  27. server端和client端都配置在同一台机器上的时候功能一切正常,可是server端和client端不在同一台机器上时,就出问题了。。
    能出来client端登陆界面,输入账号和密码点击登陆报错;
    exception
    java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:341)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:116)
    org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)

    root cause
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    sun.security.ssl.Alerts.getSSLException(Unknown Source)
    sun.security.ssl.SSLSocketImpl.fatal(Unknown Source)
    sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    sun.security.ssl.Handshaker.fatalSE(Unknown Source)
    sun.security.ssl.ClientHandshaker.serverCertificate(Unknown Source)
    sun.security.ssl.ClientHandshaker.processMessage(Unknown Source)
    sun.security.ssl.Handshaker.processLoop(Unknown Source)
    sun.security.ssl.Handshaker.process_record(Unknown Source)
    sun.security.ssl.SSLSocketImpl.readRecord(Unknown Source)
    sun.security.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
    sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    sun.security.ssl.SSLSocketImpl.startHandshake(Unknown Source)
    sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
    sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
    sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
    sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:326)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:116)
    org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)

    • 很可能是你的证书生成有问题,可以不用ssl的方式先配置 看看能不能实现??

      • java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
        java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:183)
        java.security.cert.PKIXParameters.(PKIXParameters.java:103)
        java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:87)
        sun.security.validator.PKIXValidator.(PKIXValidator.java:57)
        sun.security.validator.Validator.getInstance(Validator.java:161)
        com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:108)
        com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:204)
        com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
        com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
        com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
        com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
        com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
        com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
        com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
        com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)
        请问这个错误 是证书造成的么?

  28. 我是根据楼主的示例来搭建cas环境,经过一天的“找猫画虎”,实现了sso演示示例,楼主辛苦了!
    看到有些人也遇到了一些问题,比如配置完成之后的404错误,我分享下我的解决过程:首先查看对应应用的tomcat服务器的log日志,报错如下:
    严重: Exception starting filter CAS Single Sign Out Filter
    java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
    经过此分析,说明是log类找不到,也即系统运行需要的有关log类包没有引入或引入错误,解决办法:
    将commons-logging-1.1.jar拷贝到“webapps\examples\WEB-INF\lib”下即可。
    commons-logging-1.1.jar包是在cas-client-3.2.1\modules中。

  29. 大神
    我把filter加入到xml文件中,然后访问
    http://localhost:8080/examples/servlets
    就出现404错误
    type Status report
    message /examples/servlets
    description The requested resource is not available.
    控制台没有其他错误,而且其他配置如ssl,cas都是对的
    求大神解惑啊

  30. 关于ssl cert import,还有一点要注意的:

    import keystore的位置(JAVA_HOME)要和启动tomcat的JRE_HOME匹配。否则证书导入的地方,和tomcat校验证书的地方不同,还是会出错。

  31. 楼主,我在修改web.xml之后一切正常。修改之后可以访问http://app1.micmiu.com:18080/examples/servlets/,但HelloWorld就访问不了了,出现404。请问这个该如何解决呀?急用

  32. 大神,我在本机配置的时候可以单点退出,但是把cas-server放到服务器上,cas-client在本机的时候,就不能单点退出了,不知道能不能帮忙解决一下哈~~谢谢

    • 不能单点退出 能否说得详细点,比如两个app有没有异常错误,是每个client都不能退出 还是什么?然后你再把你的clent 也放在服务器上看看什么现象?

  33. java.lang.ClassNotFoundException: ????????org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter这个类找不到,但是我的确有,是不是???编码的问题?

  34. 为什么在example项目里配置上web.xml,访问“http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample”就报404
    tomcat里报:
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [logoutParameterName] not found. Using default value [logoutRequ
    est]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [serverName] loaded from FilterConfig.getInitParameter with value
    [http://app1.ainx.com:18080]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [service] not found. Using default value [null]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [artifactParameterName] not found. Using default value [ticket]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [serviceParameterName] not found. Using default value [service]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [encodeServiceUrl] not found. Using default value [true]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [casServerLoginUrl] loaded from FilterConfig.getInitParameter wit
    h value [https://demo.ainx.com:8443/cas/login]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    ertyFromInitParams
    信息: Property [renew] not found. Using default value [false]
    2013-7-18 20:38:07 org.jasig.cas.client.util.AbstractConfigurationFilter getProp
    这是什么原因呢?

  35. 遇到一个问题,想请求帮助,急,望回复,当访问app1.micmiu.com:18080/examples时,自动跳转CAS登录,当输入用户名和密码登录成功后,就出现如异常:No name matching cas.yaochen.com found“ 域名,什么的都配置好了 ,我的版本是 cas-server-3.5.2,cas-client-3.2.1

  36. 按照你的方式,单点登录是ok了,可是注销后没有重新认证啊,直接就进来了,请教下,有遇到过么?

  37. 大神,我在配置到客户端证书导入时出现keytool错误: java.lang.RuntimeException: 用法错误,Files 不是合法的命令

  38. 楼主您好,按照您的部署,我能从app1跳转至cas登录界面,但是登录成功后不能跳转回app1,黑窗口显示信息:NO Proxy Ticket found for [].楼请问楼主知道原因吗? ❓

  39. 楼主 有碰到java.security.cert.CertificateException: No subject alternative names present
    sun.security.util.HostnameChecker.matchIP(HostnameChecker.java:142)
    sun.security.util.HostnameChecker.match(HostnameChecker.java:91) 这个问题吗?求解 谢谢!!!

  40. z,在给app1的web.xml配置之前,app1下的helloworld能访问,但是配置后,就报404了,求帮助!

    • 看看有没有错误日志?这种情况绝大多数是配置错误

      • 能重定向了 但是又有个问题,我打开app1经过认证后,返回的URL会有个ticket,这时我再打开app2,直接打开了,并没带ticket,正常情况应该是带的啊

        • java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
          java.security.cert.PKIXParameters.setTrustAnchors(PKIXParameters.java:183)
          java.security.cert.PKIXParameters.(PKIXParameters.java:103)
          java.security.cert.PKIXBuilderParameters.(PKIXBuilderParameters.java:87)
          sun.security.validator.PKIXValidator.(PKIXValidator.java:57)
          sun.security.validator.Validator.getInstance(Validator.java:161)
          com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.getValidator(X509TrustManagerImpl.java:108)
          com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:204)
          com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:249)
          com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1014)
          com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:124)
          com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Handshaker.java:516)
          com.sun.net.ssl.internal.ssl.Handshaker.process_record(Handshaker.java:454)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:884)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1096)
          com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1123)

  41. 楼主,按照您这个配置后,在7.1节输入用户名密码登陆后出现——严重: org.xml.sax.SAXParseException: The element type “label” must be terminated by the matching end-tag “”.
    org.xml.sax.SAXParseException: The element type “label” must be terminated by the matching end-tag “”. 异常是怎么回事。

  42. lz,按照你的客户端部署在7.1节输入http://app1.micmiu.com:18080/examples/servlets/servlet/HelloWorldExample后直接报HTTP Status 404 –
    怎么回事,万分感谢!

  43. ❓ 楼主你好,我按照你的教程来配置时,在7.1节出现错误。输入app1的网址后,能够跳转到cas服务页面,但是登陆cas后,出现异常,如下:
    HTTP Status 500 – javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    网上找了些办法,但都无效。 😳

  44. lz,上面这些我都实现了,还有个问题,当然多个系统都进行登录这个单点登录时,比如A,B两个系统,A中有a用户表,B中有b用户表,那么我怎么进行验证呢?

    • CAS服务端-配置数据库查询认证机制,我看到你的这篇啦。

    • 如果是旧系统的整合,而且不能修改用户名(实际也基本都是这样的情景),那么你需要在CAS进行相应的改造,比如:一个员工号007的cas的用户名:michael, 他在A系统的中的用户名为:michael007,在B系统中对应的用户名为:michael123,那么你在cas系统中应该管理michael这个用户对应各个系统的关系表,比如他要登录A系统,认证有A系统的权限,然后就把用户michael007 传递给A系统 ,具体A系统的相关权限 还由原A系统进行认证管理

  45. 楼主,我知道了。谢谢。
    还有个问题请教下,有用过cas+shiro吗?并在spring中进行配置cas和shiro。

  46. 我不能同时其他两个tomcat

    • 不可能吧 启动两个tomcat 和这个没有关系个

      • 如果环境变量设置了CATALINA_HOME,那么启动不同的tomcat时,启动脚本startup.bat会找到相同的CATALINA_HOME,那就会出现出现不同的tomcat打架的情况。

        一个解决办法是修改不同的startup.bat,明确指定启动时的CATALINA_HOME。当然更简单的办法是把CATALINA_HOME从环境变量中去掉(如果不影响其他应用的话)。

  47. 我不能同时启动两个tomcat

  48. 楼主,按照你的客户端部署不能成功。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">