CAS单点登录报错 org.jasig.cas.client.util.XmlUtils 必须由匹配的结束标记

来源:互联网 发布:网络平台合作协议 编辑:程序博客网 时间:2024/06/04 19:49
今日调试单点登录时遇到下面的错误,查阅网上各种资料没有解决。经过自己的思索,可能是字符乱码导致正好cas服务器返回的信息有不规则的字符,导致解析报错。于是尝试解决。
1、报错信息如下:
2017-06-01 19:15:10,348 ERROR [org.jasig.cas.client.util.XmlUtils] - " 终止。>
org.xml.sax.SAXParseException; lineNumber: 31; columnNumber: 15; 元素类型 "cas:aae004" 必须由匹配的结束标记 "" 终止。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.fatalError(ErrorHandlerWrapper.
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.
at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(XMLErrorReporter.
at com.sun.org.apache.xerces.internal.impl.XMLScanner.reportFatalError(XMLScanner.
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.
at org.jasig.cas.client.util.XmlUtils.getTextForElement(XmlUtils.
at org.jasig.cas.client.validation.Cas20ServiceTicketValidator.parseResponseFromServer(Cas20ServiceTicketValidator.
at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.
at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
at com.ylzinfo.ahygzw.filter.LoginFilter.doFilter(LoginFilter.
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
at org.jasig.cas.client.session.SingleSignOutFilter.doFilter(SingleSignOutFilter.
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.
at
at
at

2、解决思路
首先发现cas服务器有些账号可以登录,有些不能登录。而这些账号格式都一样,区别就在内容。而返回数据有一个中文内容的字段,尝试将数据库该账号的中文内容修改成别的内容,再次启动调试,发现不报错!于是猜测可能是不同的中文乱码,有的正好会导致cas客户端解析失败。
解决方法:在客户端web.xml的CAS Validation Filter配置下增加
encoding
utf-8
再次还原之前报错的账号内容,登录成功!
原创粉丝点击