高分求cas单点登录分析,RuntimeException

J2EE 码拜 10年前 (2015-04-17) 1096次浏览 0个评论
 

话说,我在本地测试cas单点登录都已经ok了,没有问题了,但是发布到本地服务器上一直都抛出一个异常,而且,经过测试,配置的cas服务器是没有问题的,如果不进行跳转,是可以登录成功的,而,cas客户端配置也没有太大问题,我觉得,因为,只是简单的配置个web.xml文件,然后,在加上两个jar包。其他的也没什么。

从异常信息来看,应该是证书的问题,大家知道,cas登录一个关键因素就是导入证书到jdk中。但是,我也做了很多遍生成证书,导入证书,各种折腾,还是会抛异常。

想了很多遍,我又想到的一点是,是不是tomcat的jdk版本是自带的,是不是需要手工指定某特定的jdk.然后又上网查资料,手工指定jdk,结果还是一样的。

实在没辙了。各位大牛给分析分析,到底是哪一步出问题了。

以上,是我个人的分析。不知有没有错。

谢谢。。

2013-7-12 16:05:18 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw 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
	at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:341)
	at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:305)
	at org.jasig.cas.client.validation.AbstractCasProtocolUrlBasedTicketValidator.retrieveResponseFromServer(AbstractCasProtocolUrlBasedTicketValidator.java:50)
	at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:207)
	at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at cn.jsprun.filter.FileCaptureFilter.doFilter(FileCaptureFilter.java:43)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at cn.jsprun.filter.OnlineFilter.doFilter(OnlineFilter.java:195)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at cn.jsprun.filter.GZIPFilter.doFilter(GZIPFilter.java:33)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at cn.jsprun.filter.EncodingFilter.doFilter(EncodingFilter.java:26)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:879)
	at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:600)
	at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1703)
	at java.lang.Thread.run(Unknown Source)
Caused by: 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 com.sun.net.ssl.internal.ssl.Alerts.getSSLException(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.fatal(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.fatalSE(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.serverCertificate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.ClientHandshaker.processMessage(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.processLoop(Unknown Source)
	at com.sun.net.ssl.internal.ssl.Handshaker.process_record(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
	at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
	at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
	at sun.net.www.protocol.http.HttpURLConnection.getInputStream(Unknown Source)
	at sun.net.www.protocol.https.HttpsURLConnectionImpl.getInputStream(Unknown Source)
	at org.jasig.cas.client.util.CommonUtils.getResponseFromServer(CommonUtils.java:326)
	... 31 more
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(Unknown Source)
	at sun.security.validator.PKIXValidator.engineValidate(Unknown Source)
	at sun.security.validator.Validator.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.validate(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	at com.sun.net.ssl.internal.ssl.X509TrustManagerImpl.checkServerTrusted(Unknown Source)
	... 44 more
Caused by: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
	at sun.security.provider.certpath.SunCertPathBuilder.engineBuild(Unknown Source)
	at java.security.cert.CertPathBuilder.build(Unknown Source)
	... 50 more
高分求cas单点登录分析,RuntimeException
什么情况。。。求解。。。
高分求cas单点登录分析,RuntimeException
竟然木有一个人懂?
高分求cas单点登录分析,RuntimeException
60分
你怎么设置的Context, 指定证书,忘记密码没有?

字面上是安全验证错误。。

高分求cas单点登录分析,RuntimeException
引用 3 楼 ch656409110 的回复:

你怎么设置的Context, 指定证书,忘记密码没有?

字面上是安全验证错误。。

设置context??
指定证书??

这两个好像都没有设置。我在本地测试的时候没有设置这些,这些该在哪里设置呢???

qq:1054008871,能加qq聊下吗?谢谢。
密码,我倒是在cas服务器中的conf,server.xml文件中指定了。还有

高分求cas单点登录分析,RuntimeException
我也没做过单点登录,,就会点皮毛。。。
你看下 这个 :  http://blog.csdn.net/small_love/article/details/6664831
高分求cas单点登录分析,RuntimeException
引用 5 楼 ch656409110 的回复:

我也没做过单点登录,,就会点皮毛。。。
你看下 这个 :  http://blog.csdn.net/small_love/article/details/6664831

谢谢。这不错误已经没有问题了,但又抛出另一个异常。不知道,这是什么情况。

高分求cas单点登录分析,RuntimeException

2013-7-15 12:14:42 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet jsp threw exception
org.jasig.cas.client.validation.TicketValidationException: 
		绁ㄦ牴""ST-2-Q9Z1aYLaaqMXphbo1WCQ-cas01.example.org""涓嶇鍚堢洰鏍囨湇鍔?
	at org.jasig.cas.client.validation.Cas20ServiceTicketValidator.parseResponseFromServer(Cas20ServiceTicketValidator.java:86)
	at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:217)
	at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at com.nodoor.common.util.page.PagerFilter.doFilter(Unknown Source)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88)
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)
高分求cas单点登录分析,RuntimeException
这是什么情况呢?求大牛!
高分求cas单点登录分析,RuntimeException
20分
个人觉得是你测试环境的话,是服务端和客户端都是本地,之后生产环境,服务端和客户端分开的了~这样的话,你需要把你生产的证书加载到客户端。客户端需要制定ssl路径
高分求cas单点登录分析,RuntimeException
http://mengyang.iteye.com/blog/575671
高分求cas单点登录分析,RuntimeException
引用 9 楼 alexgaoyihang 的回复:

个人觉得是你测试环境的话,是服务端和客户端都是本地,之后生产环境,服务端和客户端分开的了~这样的话,你需要把你生产的证书加载到客户端。客户端需要制定ssl路径

谢谢,两个问题都已经解决了。第一个是因为在cas服务器中的conf文件夹中的server.xml文件没有配置证书的路径
<connector port=”8443″ protocol=”HTTP/1.1″ sslenabled=”true” maxthreads=”150″ scheme=”https” secure=”true” clientauth=”false” sslprotocol=”TLS” keystorefile=”D:/keys/wsriakey” keystorepass=”wsria.com”>
</connector>

高分求cas单点登录分析,RuntimeException
后面抛出的这个异常是因为客户端web.xml文件没有配置好。
<!– 该过滤器负责用户的认证工作,必须启用它 –>
<filter>
    <filter-name>CASFilter</filter-name>
    <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
    <init-param>
        <param-name>casServerLoginUrl</param-name>
        <param-value>https://localhost:9443/cas/login</param-value>
    </init-param>
    <init-param>
        <!–这里的server是服务端的IP,特别注意,登录时参数service的参数要和这个路径匹配–>
        <param-name>serverName</param-name>
        <param-value>http://localhost:8080/</param-value>
    </init-param>
</filter>
高分求cas单点登录分析,RuntimeException
两处地方都要匹配。谢谢各位大牛的指导。谢谢。
高分求cas单点登录分析,RuntimeException
10分
search by google.
高分求cas单点登录分析,RuntimeException
同时现在又面临一个新的挑战,现在的配置的客户端拦截器,是在根目录下拦截,也就是,打开网站就会拦截是否处于登录或未登录状态,如果未登录就要求跳转到登录页面。

那么如何配置在未登录的情况下正常打开网站,而不用跳到登录页面。

最简单的一种方式,就是,修改拦截器的路径
<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/login</url-pattern><!– 拦截器,拦截被登录的页面,与登录链接相呼应 –>
</filter-mapping>
但可以实现,正常打开网站,但是,必须要点击登录按钮才能走拦截器。这也是不好的。
有没有什么两全的方法可以做好呢。

各位大牛,这,怎么破??

高分求cas单点登录分析,RuntimeException
引用 15 楼 yy008871 的回复:

同时现在又面临一个新的挑战,现在的配置的客户端拦截器,是在根目录下拦截,也就是,打开网站就会拦截是否处于登录或未登录状态,如果未登录就要求跳转到登录页面。

那么如何配置在未登录的情况下正常打开网站,而不用跳到登录页面。

最简单的一种方式,就是,修改拦截器的路径
<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/login</url-pattern><!– 拦截器,拦截被登录的页面,与登录链接相呼应 –>
</filter-mapping>
但可以实现,正常打开网站,但是,必须要点击登录按钮才能走拦截器。这也是不好的。
有没有什么两全的方法可以做好呢。

各位大牛,这,怎么破??

在你验证是否登录的filter中加一个初始化参数,也就是你上面的/login 不进行非登录判断,直接放行。。

     <init-param> 
	   <param-name>excludedUrls</param-name> 
	   <param-value>/login</param-value> 
     </init-param> 
高分求cas单点登录分析,RuntimeException
引用 16 楼 ch656409110 的回复:
Quote: 引用 15 楼 yy008871 的回复:

同时现在又面临一个新的挑战,现在的配置的客户端拦截器,是在根目录下拦截,也就是,打开网站就会拦截是否处于登录或未登录状态,如果未登录就要求跳转到登录页面。

那么如何配置在未登录的情况下正常打开网站,而不用跳到登录页面。

最简单的一种方式,就是,修改拦截器的路径
<filter-mapping>
    <filter-name>CASFilter</filter-name>
    <url-pattern>/login</url-pattern><!– 拦截器,拦截被登录的页面,与登录链接相呼应 –>
</filter-mapping>
但可以实现,正常打开网站,但是,必须要点击登录按钮才能走拦截器。这也是不好的。
有没有什么两全的方法可以做好呢。

各位大牛,这,怎么破??

在你验证是否登录的filter中加一个初始化参数,也就是你上面的/login 不进行非登录判断,直接放行。。

     <init-param> 
	   <param-name>excludedUrls</param-name> 
	   <param-value>/login</param-value> 
     </init-param> 

不行,还是不行。
输入地址localhost:8080/BBS,跳转到https://localhost:9443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2FBBS%2F
这个是不是捕获不到这个初始化变量。
而且,这个好像也不符合逻辑,因为,不管你加没加这个初始化变量,他都会被拦截到,
https://localhost:9443/cas/login?service=http%3A%2F%2Flocalhost%3A8080%2FBBS%2F
这个地址,是拦截到后跳转的地址。这是我的web.xml文件中的拦截器部分。

<!-- 该过滤器负责用户的认证工作,必须启用它 -->
	<filter>
		<filter-name>CASFilter</filter-name>
		<filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>
		<init-param>
			<param-name>excludedUrls</param-name>
			<param-value>/cas/login</param-value>
		</init-param>
		<init-param>
			<param-name>casServerLoginUrl</param-name>
			<param-value>https://localhost:9443/cas/login</param-value>
		</init-param>
		<init-param>
			<!--这里的server是服务端的IP -->
			<param-name>serverName</param-name>
			<param-value>http://localhost:8080/</param-value>
		</init-param>
	</filter>

	<filter-mapping>
		<filter-name>CASFilter</filter-name>
		<url-pattern>/login</url-pattern><!-- 拦截器,拦截被登录的页面,与登录链接相呼应 -->
	</filter-mapping>
高分求cas单点登录分析,RuntimeException
引用 18 楼 feier00 的回复:

求指教~~

高分求cas单点登录分析,RuntimeException
难道非得要去改服务器里的代码才能实现?
高分求cas单点登录分析,RuntimeException
引用 21 楼 jacktree365 的回复:

友情帮顶。。

感谢。

高分求cas单点登录分析,RuntimeException
哥们儿 你的sso现在ok了吧?能不能指导一下

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明高分求cas单点登录分析,RuntimeException
喜欢 (0)
[1034331897@qq.com]
分享 (0)

文章评论已关闭!