CAS单点登录之mysql数据库用户验证及常见问题

2023-05-16

 前面已经介绍了CAS服务器的搭建,详情见:搭建CAS单点登录服务器。然而前面只是简单地介绍了服务器的搭建,其验证方式是原始的配置文件的方式,这显然不能满足日常的需求。下面介绍下通过mysql数据库认证的方式。

  一、CAS认证之mysql数据库认证

  1、在mysql中新建一个cas数据库并创建user表


CREATE DATABASE /*!32312 IF NOT EXISTS*/`cas` /*!40100 DEFAULT CHARACTER SET gbk */;

USE `cas`;

/*Table structure for table `user` */

DROP TABLE IF EXISTS `user`;

CREATE TABLE `user` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL,
  `password` varchar(255) NOT NULL,
  `used` tinyint(2) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=gbk;

/*Data for the table `user` */

insert  into `user`(`id`,`name`,`password`,`used`) values (1,'casuser','9414f9301cdb492b4dcd83f8c711d8bb',1);  

  2、CAS的HTTP模式与HTTPS设置(可省略)


      1)cas\WEB-INF\deployerConfigContext.xml,新增p:requireSecure="false"
    <bean id="proxyAuthenticationHandler"          class="org.jasig.cas.authentication.handler.support.HttpBasedServiceCredentialsAuthenticationHandler"
          p:httpClient-ref="httpClient" p:requireSecure="false"/>
      2)cas\WEB-INF\spring-configuration
    ticketGrantingTicketCookieGenerator.xml设置p:cookieSecure="false"
    warnCookieGenerator.xml设置p:cookieSecure="false"  

  http://localhost:8080/cas/login,进入登录页面。

  默认用户为casuser/Mellon,登录成功即配置完成。

  3、设置利用数据库来验证用户

依赖包:
c3p0-0.9.1.2.jar
mysql-connector-java-5.1.21.jar
cas-server-support-jdbc-4.0.0.jar


cas\WEB-INF\deployerConfigContext.xml
  1)更换验证方式 
<!--
   <bean id="primaryAuthenticationHandler"
          class="org.jasig.cas.authentication.AcceptUsersAuthenticationHandler">
        <property name="users">
            <map>
                <entry key="casuser" value="Mellon"/>
            </map>
        </property>
    </bean>
    -->
   <!-- Define the DB Connection -->
   <bean id="dataSource"
     class="com.mchange.v2.c3p0.ComboPooledDataSource"
     p:driverClass="com.mysql.jdbc.Driver"
     p:jdbcUrl="jdbc:mysql://127.0.0.1:3306/cas?useUnicode=true&amp;characterEncoding=UTF-8&amp;zeroDateTimeBehavior=convertToNull"
     p:user="root"
     p:password="root" />
 
     <!-- Define the encode method-->
     <!--<bean id="passwordEncoder" 
       class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder" autowire="byName">     
      <constructor-arg value="MD5"/> 
     </bean> -->
    <bean id="passwordEncoder"
      class="org.jasig.cas.authentication.handler.DefaultPasswordEncoder"
      c:encodingAlgorithm="MD5"
      p:characterEncoding="UTF-8" />
 
     <bean id="dbAuthHandler"
      class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler"
      p:dataSource-ref="dataSource"
      p:sql="select password from user where name=? and used=1"
     p:passwordEncoder-ref="passwordEncoder"/>
     <!-- p:passwordEncoder-ref="passwordEncoder" -->
    2)更换验证Handle
<bean id="authenticationManager" class="org.jasig.cas.authentication.PolicyBasedAuthenticationManager">
        <constructor-arg>
            <map>
                <!--
                   | IMPORTANT
                   | Every handler requires a unique name.
                   | If more than one instance of the same handler class is configured, you must explicitly
                   | set its name to something other than its default name (typically the simple class name).
                   -->
                <entry key-ref="proxyAuthenticationHandler" value-ref="proxyPrincipalResolver" />
                <entry key-ref="dbAuthHandler" value-ref="primaryPrincipalResolver" />
           <!-- <entry key-ref="primaryAuthenticationHandler" value-ref="primaryPrincipalResolver" /> -->
            </map>
        </constructor-arg>  

  http://localhost:8080/cas,进入登录页面。如果没有配置http登录,则需要通过http://localhost:8443/cas进行访问

  默认用户为casuser/Mellon,登录成功即配置完成。

  二、常见异常

  1、证书路径不正确,由于证书未正常导入到jre\lib\security下,因此会出现以下异常。


十一月 09, 2015 4:00:31 下午 org.jasig.cas.client.util.CommonUtils getResponseFromServer
严重: 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
    at sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
    at sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506)
    at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    at sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    at sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    at sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    at sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1512)
    at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
    at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:311)
    at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:291)
    at org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:32)
    at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:187)
    at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:164)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:102)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:65)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2522)
    at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:2511)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:745)
Caused by: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:387)
    at sun.security.validator.PKIXValidator.engineValidate(PKIXValidator.java:292)
    at sun.security.validator.Validator.validate(Validator.java:260)
    at sun.security.ssl.X509TrustManagerImpl.validate(X509TrustManagerImpl.java:324)
    at sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:229)
    at sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    at sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1488)
    ... 41 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    at sun.security.provider.certpath.SunCertPathBuilder.build(SunCertPathBuilder.java:146)
    at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(SunCertPathBuilder.java:131)
    at java.security.cert.CertPathBuilder.build(CertPathBuilder.java:280)
    at sun.security.validator.PKIXValidator.doBuild(PKIXValidator.java:382)
    ... 47 more  

  2、客户端中web.xml的casServerUrlPrefix配置错误


java.lang.RuntimeException: java.io.FileNotFoundException: https://localhost:8443/serviceValidate?ticket=ST-1-1HUXO9iETnaNI2jbuvqK-cas01.example.org&service=http%3A%2F%2Flocalhost%3A8080%2FCasClient%2FIndex.jsp
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:328)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:291)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:32)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:187)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:164)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:102)


root cause 

java.io.FileNotFoundException: https://localhost:8443/serviceValidate?ticket=ST-1-1HUXO9iETnaNI2jbuvqK-cas01.example.org&service=http%3A%2F%2Flocalhost%3A8080%2FCasClient%2FIndex.jsp
    sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1835)
    sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
    sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:311)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:291)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:32)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:187)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:164)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:102)  

  正确的应为:

  3、缺少数据库连接包

    缺少cas-server-support-jdbc-4.0.0.jar、mysql-connector-java-5.1.21.jar、c3p0-0.9.1.2.jar包(在cas-server-4.0.0-release.zip下的modules目录可以找到)

  


2015-11-10 09:26:24,484 INFO [org.jasig.cas.services.DefaultServicesManagerImpl] - <Loaded 1 services.>
2015-11-10 09:26:24,812 ERROR [org.springframework.web.context.ContextLoader] - <Context initialization failed>
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'centralAuthenticationService' defined in ServletContext resource [/WEB-INF/spring-configuration/applicationContext.xml]: Cannot resolve reference to bean 'authenticationManager' while setting constructor argument; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in ServletContext resource [/WEB-INF/deployerConfigContext.xml]: Cannot resolve reference to bean 'dbAuthHandler' while setting constructor argument; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler] for bean with name 'dbAuthHandler' defined in ServletContext resource [/WEB-INF/deployerConfigContext.xml]; nested exception is java.lang.ClassNotFoundException: org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:326)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:623)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1075)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:979)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:628)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:932)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:479)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:389)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:294)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:112)
    at org.jasig.cas.web.init.SafeContextLoaderListener.contextInitialized(SafeContextLoaderListener.java:75)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:5003)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5517)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:901)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:652)
    at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:1095)
    at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1960)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'authenticationManager' defined in ServletContext resource [/WEB-INF/deployerConfigContext.xml]: Cannot resolve reference to bean 'dbAuthHandler' while setting constructor argument; nested exception is org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler] for bean with name 'dbAuthHandler' defined in ServletContext resource [/WEB-INF/deployerConfigContext.xml]; nested exception is java.lang.ClassNotFoundException: org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:326)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveManagedMap(BeanDefinitionValueResolver.java:375)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:162)
    at org.springframework.beans.factory.support.ConstructorResolver.resolveConstructorArguments(ConstructorResolver.java:637)
    at org.springframework.beans.factory.support.ConstructorResolver.autowireConstructor(ConstructorResolver.java:148)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireConstructor(AbstractAutowireCapableBeanFactory.java:1075)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:979)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:487)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:296)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:223)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:194)
    at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:320)
    ... 31 more  

  4、由于创建证书的域名(创建证书时的名字与姓氏)和在应用中配置的cas服务域名不一致导致

  


java.lang.RuntimeException: javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching sso.castest.com found
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:328)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:291)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:32)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:187)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:164)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:102)


root cause 

javax.net.ssl.SSLHandshakeException: java.security.cert.CertificateException: No name matching sso.castest.com found
    sun.security.ssl.Alerts.getSSLException(Alerts.java:192)
    sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1949)
    sun.security.ssl.Handshaker.fatalSE(Handshaker.java:302)
    sun.security.ssl.Handshaker.fatalSE(Handshaker.java:296)
    sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1506)
    sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1512)
    sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
    sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:311)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:291)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:32)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:187)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:164)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:102)


root cause 

java.security.cert.CertificateException: No name matching sso.castest.com found
    sun.security.util.HostnameChecker.matchDNS(HostnameChecker.java:221)
    sun.security.util.HostnameChecker.match(HostnameChecker.java:95)
    sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:455)
    sun.security.ssl.X509TrustManagerImpl.checkIdentity(X509TrustManagerImpl.java:436)
    sun.security.ssl.X509TrustManagerImpl.checkTrusted(X509TrustManagerImpl.java:200)
    sun.security.ssl.X509TrustManagerImpl.checkServerTrusted(X509TrustManagerImpl.java:124)
    sun.security.ssl.ClientHandshaker.serverCertificate(ClientHandshaker.java:1488)
    sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:216)
    sun.security.ssl.Handshaker.processLoop(Handshaker.java:979)
    sun.security.ssl.Handshaker.process_record(Handshaker.java:914)
    sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1062)
    sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1375)
    sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1403)
    sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:1387)
    sun.net.www.protocol.https.HttpsClient.afterConnect(HttpsClient.java:559)
    sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:185)
    sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1512)
    sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1440)
    sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java:254)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:311)
    org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:291)
    org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:32)
    org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:187)
    org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:164)
    org.jasig.cas.client.authentication.AuthenticationFilter.doFilter(AuthenticationFilter.java:102)  

  三、参考文献

http://ykt.wh.sdu.edu.cn/desktop/doc/introduction.html

http://steven-wiki.readthedocs.org/en/latest/security/cas-tomcat/

http://blog.csdn.net/frinder/article/details/7969925

mysql配置:

  http://steven-wiki.readthedocs.org/en/latest/security/cas-tomcat/

  http://www.cnblogs.com/chenyongjun/p/4770107.html

使用 CAS 在 Tomcat 中实现单点登录:

  http://www.ibm.com/developerworks/cn/opensource/os-cn-cas/

本文转自秋楓博客园博客,原文链接:http://www.cnblogs.com/rwxwsblog/p/4954843.html,如需转载请自行联系原作者
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CAS单点登录之mysql数据库用户验证及常见问题 的相关文章

  • http 登录Digest认证相关知识

    Digest access authentication https en wikipedia org wiki Digest access authentication Digest access authentication is on
  • Centos7 VNC报vncserver@:1.service:control process exited,code-exited status=98

    在一台服务器上安装完centos7后 xff0c 准备安装vncserver xff0c 安装完systemctl start vncserver 64 1 service xff0c 始终报错 xff1a 关闭防火墙和SELinux后 x
  • CAS 5.2.x 单点登录 - 搭建服务端和客户端

    一 简介 单点登录 xff08 Single Sign On xff09 xff0c 简称为 SSO xff0c 是目前比较流行的企业业务整合的解决方案之一 SSO的定义是在多个应用系统中 xff0c 用户只需要登录一次就可以访问所有相互信
  • 如何计算无人机机架对应螺旋桨大小和尺寸!

    1 计算原理 决定螺旋桨的直径是相邻两个轴的直线距离 xff0c 就是图中AB线的距离 xff0c AB线的距离也刚好螺旋桨的最大直径 思考 xff1a 如何计算AB的距离 xff1f 在三角形中 xff0c 求AB的距离 xff0c 可以
  • 搬家,告辞

    https www cnblogs com cww97
  • 【网络基础】自动协商

    自动协商 协商的内容是什么 xff1f 协商的内容是速率和双工 通过什么来协商 xff1f 通过FLP 快速链路脉冲 xff09 来协商 FLP如何协商速率 xff1f 接口发送flp时 如果在规定时间内收到了响应 xff08 flp xf
  • 2.如何优化操作大数据量数据库(改善SQL语句)

    二 改善SQL语句 很多人不知道SQL语句在SQL SERVER中是如何执行的 xff0c 他们担心自己所写的SQL语句会被SQL SERVER误解 比如 xff1a select from table1 where name 61 39
  • LACP和PAgP的四种模式

    PAgP的四种模式 模式含义开启 xff08 on xff09 端口不进行协商 xff0c 直接形成以太网通道 xff1b 在这种模式下 xff0c 对端必须也是on模式 xff0c 以太网通道才能正常工作 关闭 xff08 off xff
  • BGP的同步

    实验原理 xff1a BGP 同步规则 xff1a BGP 路由器不应使用通过 IBGP 获悉的路由或将其通告给外部邻居 xff0c 除非该路由是本地的或通过 IGP 获悉的 如果启用了同步 xff0c 则路由器通过 IBGP 获悉路由后
  • 【软件工程导论-ZZU】02. 软件生命周期、开发过程与模型

    二 软件生命周期 开发过程与模型 1 软件生命周期 软件生命周期 xff1a 是软件的产生直到报废或停止使用的生命周期 实际从事软件开发工作时 xff0c 软件规模 类型 开发环境及技术方法等因素会影响到阶段划分 xff0c 及各阶段的执行
  • MySQL5.7安装与配置(YUM)

    安装环境 xff1a CentOS7 64位 xff0c MySQL5 7 1 配置YUM源 在MySQL官网中下载YUM源rpm安装包 xff1a http dev mysql com downloads repo yum span cl
  • ONOS高可用性和可扩展性实现初探

    为什么80 的码农都做不了架构师 xff1f gt gt gt ONOS 的发布直面OpenDaylight 进行挑战 xff0c 直接将 SDN 领域两大阵营 xff08 运营商和设备商 xff09 的竞争瞬间升级 xff0c 之所以 O
  • java a 运算_java中a++和++a在较复杂的运算中分析

    以下是一段普遍都了解的代码 xff1a public static void main String args int a 61 3 System out println a 43 43 43 1 4 System out println
  • Boom!!!计算机系统,从理解到爆炸,Bomblab

    进入目录下 bomb 开始运行炸弹 对于炸弹command not found之类的鬼畜情况 xff1a chmod 777 bomb 然后再运行炸弹 objdump d bomb gt bomb s 把整个代码打到文件里去 xff0c 也
  • 笔记本无法连接校园网,windows诊断显示校园网之未响应

    打开cmd xff08 管理员 xff09 xff1a 输入以下四条 xff0c 每一条都按enter ipconfig flushdns ipconfig registerdns ipconfig release ipconfig ren
  • 判断两个IP是否处于同一子网(网段)

    大学的时候有上过计算机网络的课程 xff0c IP这块也有一些接触 xff0c 但向来不是很好学的我 xff0c 对于一些问题似是而非的态度 xff0c 感觉知道 xff0c 但具体的又说不上 xff0c 今天就花了点时间彻底把这个问题搞清
  • zeromq发送文件到服务器,将zeromq套接字连接到redis服务器以进行数据传输?

    我想将服务器上的消息 ZMQ ROUTER套接字 xff0c 处理多个客户端 传输到redis服务器以用于存储目的 我听说 xff0c redis不会说ZMQ 所以如果不搭桥 xff0c 就不可能实现 我接受你的建议 在哪里看 xff1f
  • 历数NFV的发展历程

    随着网络产业正在通过SDN转型 xff0c NFV的互补架构概念越来越突出 为解释这种状况 xff0c 下文中将对NFV的定义 如何出现以及如何影响企业数据中心加以阐释 NFV的定义 维基百科对于NFV的定义是 xff1a NFV是使用虚拟
  • 线程相关知识

    线程的概念 1 xff0e 线程 1 线程是由表示程序运行状态的寄存器 包括程序计数器和堆栈 组成的 2 线程是程序执行过程中的某一时刻的状态 3 线程是一个用户级的实体 xff0c 在内存中驻留在普通用户级方法可以直接访问的区域 4 每个
  • 白盒交换机操作系统混战

    白盒交换机的出现给了用户选择最佳软硬件平台的权利 xff0c 它仅仅提供交换机硬件和ONIE xff08 开放网络安装环境 xff09 xff0c 用户可以自行选择最合适的交换机芯片 xff0c 降低成本实现最大效益 但是白盒交换机没有软件

随机推荐

  • Mysql修改设置root密码的命令及方法

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 方法一 xff1a 使用SQL语句命令UPDATE 需用到Mysql自带的加密函数PASSWORD string xff0c 该函数对一个明文密码进行加密 xff0c 但不
  • python中if有多个条件_Python if有多个条件怎么办

    Python中if有多个条件的处理方法 python中if有多个条件 可以使用and or elif关键字来连接 代码为 if name zs and age 18 print name zs age 18 Python中if有多个条件的处
  • linux查看openssl安装目录,linux如何使用openssl

    最近要做一个项目要用到openssl库 Linux里 无奈 xff0c 不得不安装openssl了 可是查了好多的资料都是一头雾水 xff0c 都不知道到底要是怎样才算是安装成功了 我的系统是 xff1a redhat xff0c 内核是
  • linux查看topic分区的数据量,如何查看Kafka的Topic消费情况

    温馨提示 xff1a 如果使用电脑查看图片不清晰 xff0c 可以使用手机打开文章单击文中的图片放大查看高清原图 Fayson的github xff1a https github com fayson cdhproject 提示 xff1a
  • AttackLab 这次我偷懒了

    这里有题解 xff0c 这里有题解 xff0c 这里有题解 迅速暴击上面一行 xff0c xff0c xff0c xff0c xff0c 感谢男神LJL 留几张图 第一次lab结束的时候还是12点之前 xff0c 感人 xff08 PS x
  • 与ajax相同的技术,AJAX是什么?都包含那些技术?

    AJAX的意思与包含的技术楼上的 亲 伱左脸 已经做出了回答了 xff0c 下面我就给你一点别的吧 xff0c 希望对你有所帮助 与传统的web应用比较 传统的web应用允许用户填写表单 form xff0c 当提交表单时就向web服务器发
  • asp网站 服务器iis 安全设置,Windows server 2008 R2 + IIS7.5,ASP网站设置

    1 让IIS7支持ASP Win2008 IIS7 默认不安装ASP xff0c 如果需要ASP 的支持 xff0c 需要将这个角色服务选上 2 相关设置 应用程序池 gt DefaultAppPool gt 高级设置 gt 启用32位应用
  • 服务器修改css,本地服务器修改css

    本地服务器修改css 内容精选 换一换 Windows Server 2012 R2操作系统弹性云服务器 xff0c 本地使用远程桌面连接功能连接云服务器并启用redirected drive功能时 xff0c 云服务器出现蓝屏 远程桌面连
  • RDS SQL Server 创建数据库关系图(Database Diagrams)

    背景介绍 SQL Server 关系图是一个非常简单易用且方便的工具 xff0c 可以直观的把数据库中表之间的关系展现出来 xff0c 不用手动整理或者写脚本整理各个表之间的关系 xff0c 如下图 RDS SQL Server 2008
  • MapReduce实战:自定义输入格式实现成绩管理

    1 项目需求 我们取有一份学生五门课程的期末考试成绩数据 xff0c 现在我们希望统计每个学生的总成绩和平均成绩 样本数据如下所示 xff0c 每行数据的数据格式为 xff1a 学号 姓名 语文成绩 数学成绩 英语成绩 物理成绩 化学成绩
  • 走心整理——十个常用深度学习算法

    十分抱歉 xff0c 由于项目太忙 xff08 我会说自己懒吗 xff1f xff09 柳猫一直没有更新自己的手记 xff0c 现在 xff0c 就让柳猫来讲讲十个常用的深度学习算法 过去十年里 xff0c 人们对机器学习的兴趣经历了爆炸式
  • Linux信号量操作次数的探究

    需求源于项目中一部分设计的代码 struct semaphore类型的信号量 xff0c 使用up 进行释放 xff0c down interruptible 和down 获得指定信号量 xff08 前者中 xff0c 若该信号量已争用则进
  • 编写简单的MapReduce程序(Hadoop2.2.0)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 我们以简化版的气温统计为例 xff0c 演示如何开发一个MapReduce程序 Eclipse中新建一个MapReduce项目 xff0c 命名为MaxTemperatur
  • 【操作系统】trap,interrupt,和异常

    陷阱 计算机有两种运行模式 xff1a 用户态 xff0c 内核态 其中操作系统运行在内核态 xff0c 在内核态中 xff0c 操作系统具有对所有硬件的完全访问权限 xff0c 可以使机器运行任何指令 xff1b 相反 xff0c 用户程
  • PowerShell-数组的多种录入方法

    PS xff1a 这个需求是小骆驼发起的 感谢 微软云方案交流 236804566 这个高端群的用户贡献 我们首先看看一个标准的数组 是怎么录入的 PS D gt arr 61 34 adf 34 34 asdfer 34 34 sreds
  • vnc 端口修改、用户添加删除、批量启动停止

    2019独角兽企业重金招聘Python工程师标准 gt gt gt yum y install tiger server usr bin env bash config file 61 34 etc sysconfig vncservers
  • Docker命令详解

    最近学习Docker xff0c 将docker所有命令实验了一番 xff0c 特整理如下 xff1a docker help Usage docker OPTIONS COMMAND arg docker daemon help dock
  • rman备份rman-00554 ,rman-04005错误

    gt rman target 64 orac 到Oracle安装目录找到 network admin sqlnet ora文件 将SQLNET AUTHENTICATION SERVICES 61 NONE 修改为 SQLNET AUTHE
  • 码农学ODL之SDN入门篇

    本文作为码农学ODL系列的SDN基础入门篇 xff0c 分为两部分 第一部分 xff0c 主要讲述SDN是什么 xff0c 改变了什么 xff0c 架构是什么样的 xff0c 第二部分 xff0c 简要介绍如何去学习SDN 1 什么是SDN
  • CAS单点登录之mysql数据库用户验证及常见问题

    前面已经介绍了CAS服务器的搭建 xff0c 详情见 xff1a 搭建CAS单点登录服务器 然而前面只是简单地介绍了服务器的搭建 xff0c 其验证方式是原始的配置文件的方式 xff0c 这显然不能满足日常的需求 下面介绍下通过mysql数