当前位置: 代码迷 >> J2EE >> 单点登录错误
  详细解决方案

单点登录错误

热度:61   发布时间:2016-04-22 00:32:16.0
单点登录异常、
这个异常跟之前在网上一哥们发贴一模一样、只不过没解决、
这个是之前那哥们的帖子:
http://topic.csdn.net/u/20120919/17/42a9da2c-d93c-4ad1-bc46-51e389d24649.html


我的cas service 3.5.1 client 是3.2.1

cas正常部署、在自己的项目没加web.xml的cas设置 登录是可以的

现在的问题是 cas拦截全部路径、 cas登录后跳转、 网页卡很长时间 最后报出异常、

后台也明显的给了ticket、并且要跳到那个路径、不过却异常了、

各位帮忙分析下原因、


异常:

XML code
ERROR org.jasig.cas.client.util.XmlUtils  - org.xml.sax.SAXParseException: The element type "label" must be terminated by the matching end-tag "</label>".org.xml.sax.SAXParseException: The element type "label" must be terminated by the matching end-tag "</label>".    at org.apache.xerces.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)    at org.apache.xerces.util.ErrorHandlerWrapper.fatalError(Unknown Source)    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)    at org.apache.xerces.impl.XMLErrorReporter.reportError(Unknown Source)    at org.apache.xerces.impl.XMLScanner.reportFatalError(Unknown Source)    at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown Source)    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)    at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)    at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)    at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)    at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)    at org.jasig.cas.client.util.XmlUtils.getTextForElement(XmlUtils.java:164)



然后出500错误、


XML code
java.lang.NullPointerException    at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:768)    at org.jasig.cas.client.proxy.ProxyGrantingTicketStorageImpl.retrieve(ProxyGrantingTicketStorageImpl.java:85)    at org.jasig.cas.client.validation.Cas20ServiceTicketValidator.parseResponseFromServer(Cas20ServiceTicketValidator.java:91)    at org.jasig.cas.client.validation.AbstractUrlBasedTicketValidator.validate(AbstractUrlBasedTicketValidator.java:217)    at org.jasig.cas.client.validation.AbstractTicketValidationFilter.doFilter(AbstractTicketValidationFilter.java:169)



自己项目的web.xml中cas的配置如下:(根据一个demo的样例来设置的、没有改动其他cas文件、http://www.kafeitu.me/sso/2010/11/05/sso-cas-full-course.html )
XML code
<!-- ======================== 单点登录开始 ======================== -->        <!-- 用于单点退出,该过滤器用于实现单点登出功能,可选配置-->        <listener>                <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>        </listener>        <!-- 该过滤器用于实现单点登出功能,可选配置。 -->        <filter>                <filter-name>CAS Single Sign Out Filter</filter-name>                <filter-class>org.jasig.cas.client.session.SingleSignOutFilter</filter-class>        </filter>        <filter-mapping>                <filter-name>CAS Single Sign Out Filter</filter-name>                <url-pattern>/*</url-pattern>        </filter-mapping>        <!-- 该过滤器负责用户的认证工作,必须启用它 -->        <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://www.boyu.cn:8443/cas/login</param-value>                        <!--这里的server是服务端的IP-->                </init-param>                <init-param>                        <param-name>serverName</param-name>                        <param-value>http://localhost:80</param-value>                </init-param>        </filter>        <filter-mapping>                <filter-name>CASFilter</filter-name>                <url-pattern>/*</url-pattern>        </filter-mapping>        <!-- 该过滤器负责对Ticket的校验工作,必须启用它 -->        <filter>                <filter-name>CAS Validation Filter</filter-name>                <filter-class>                        org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter</filter-class>                <init-param>                        <param-name>casServerUrlPrefix</param-name>                        <param-value>https://www.boyu.cn:8443/cas/login</param-value>                        <!-- https://www.boyu.cn:8443/cas -->                                        </init-param>                <init-param>                        <param-name>serverName</param-name>                        <param-value>http://localhost:80</param-value>                </init-param>        </filter>        <filter-mapping>                <filter-name>CAS Validation Filter</filter-name>                <url-pattern>/*</url-pattern>        </filter-mapping>        <!--                该过滤器负责实现HttpServletRequest请求的包裹,                比如允许开发者通过HttpServletRequest的getRemoteUser()方法获得SSO登录用户的登录名,可选配置。        -->        <filter>                <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>                <filter-class>                        org.jasig.cas.client.util.HttpServletRequestWrapperFilter</filter-class>        </filter>        <filter-mapping>                <filter-name>CAS HttpServletRequest Wrapper Filter</filter-name>                <url-pattern>/*</url-pattern>        </filter-mapping>        <!--                该过滤器使得开发者可以通过org.jasig.cas.client.util.AssertionHolder来获取用户的登录名。                比如AssertionHolder.getAssertion().getPrincipal().getName()。        -->        <filter>                <filter-name>CAS Assertion Thread Local Filter</filter-name>                <filter-class>org.jasig.cas.client.util.AssertionThreadLocalFilter</filter-class>        </filter>        <filter-mapping>                <filter-name>CAS Assertion Thread Local Filter</filter-name>                <url-pattern>/*</url-pattern>        </filter-mapping>                <!-- 自动根据单点登录的结果设置本系统的用户信息 -->        <filter>                <display-name>AutoSetUserAdapterFilter</display-name>                <filter-name>AutoSetUserAdapterFilter</filter-name>                <!-- 自己写的一个打印登录的name类 -->                <filter-class>com.my.framework.utils.AutoSetUserAdapterFilter</filter-class>        </filter>        <filter-mapping>                <filter-name>AutoSetUserAdapterFilter</filter-name>                <url-pattern>/*</url-pattern>        </filter-mapping>        <!-- ======================== 单点登录结束 ======================== -->
  相关解决方案