Java CAS单次注销不工作

Java CAS单次注销不工作,java,single-sign-on,cas,Java,Single Sign On,Cas,我正在通过CAS在JavaEE环境中实现单点登录+单点注销 在身份验证方面,我有cas服务器webapp v4.0.1。然后,使用cas-client-corev3.1.10创建两个简单的Java+Spring MVC web应用程序 没有关于单点登录的问题。如果我访问/app1,我将被重定向到cas服务器webapp中的cas登录页面。在用户+pass输入之后,我被重定向到/app1并正确验证。另外,如果我导航到/app2,这个将获得它的auth票证。到目前为止还不错 至于单次注销,可能我误解

我正在通过CAS在JavaEE环境中实现单点登录+单点注销

在身份验证方面,我有cas服务器webapp v4.0.1。然后,使用cas-client-corev3.1.10创建两个简单的Java+Spring MVC web应用程序

没有关于单点登录的问题。如果我访问/app1,我将被重定向到cas服务器webapp中的cas登录页面。在用户+pass输入之后,我被重定向到/app1并正确验证。另外,如果我导航到/app2,这个将获得它的auth票证。到目前为止还不错

至于单次注销,可能我误解了:但我就是这么做的:

app1和app2都有一个Spring控制器映射到/logout url:

@Controller
public class LogoutController {

    @RequestMapping("/logout")
    public String logout(HttpSession session){
        session.invalidate();
        return "redirect:https://cas-server-host:8443/cas/logout?service=http://cas-server-host:9080/cas1/action/index";
    }
}
也就是说,我使http会话无效,并重定向到cas服务器注销url,从而使票证无效

在cas服务器日志中,我看到它销毁TGT票证,并向每个应用程序的cas筛选器发送注销请求:

DEBUG [org.jasig.cas.CentralAuthenticationServiceImpl] - <Removing ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org] from registry.>
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Attempting to retrieve ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org]>
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org] found in registry.>
DEBUG [org.jasig.cas.CentralAuthenticationServiceImpl] - <Ticket found. Processing logout requests and then deleting the ticket...>
DEBUG [org.jasig.cas.logout.SamlCompliantLogoutMessageCreator] - <Generated logout message: [<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="LR-13-TfRj1HnvAjpBjNIdaDvDMJUMXk7wffdXgB5" Version="2.0" IssueInstant="2015-02-10T12:18:18Z"><saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@NOT_USED@</saml:NameID><samlp:SessionIndex>ST-16-aXpUJpwO4MQ09caXZRKX-cas01.example.org</samlp:SessionIndex></samlp:LogoutRequest>]>
DEBUG [org.jasig.cas.logout.LogoutManagerImpl] - <Sending logout request for: [http://localhost:9080/cas2]>
DEBUG [org.jasig.cas.util.SimpleHttpClient] - <Attempting to access http://localhost:9080/cas2>
DEBUG [org.jasig.cas.logout.SamlCompliantLogoutMessageCreator] - <Generated logout message: [<samlp:LogoutRequest xmlns:samlp="urn:oasis:names:tc:SAML:2.0:protocol" ID="LR-14-BaKvuaIbwxg9Le9H3QIvWORfNSE0dxaxsCE" Version="2.0" IssueInstant="2015-02-10T12:18:20Z"><saml:NameID xmlns:saml="urn:oasis:names:tc:SAML:2.0:assertion">@NOT_USED@</saml:NameID><samlp:SessionIndex>ST-15-zaX6aojKs0PiggCles6J-cas01.example.org</samlp:SessionIndex></samlp:LogoutRequest>]>
DEBUG [org.jasig.cas.util.SimpleHttpClient] - <Finished sending message to http://localhost:9080/cas2>
DEBUG [org.jasig.cas.logout.LogoutManagerImpl] - <Sending logout request for: [http://localhost:9080/cas1]>
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Removing ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org] from registry>
DEBUG [org.jasig.cas.ticket.registry.DefaultTicketRegistry] - <Attempting to retrieve ticket [TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org]>
DEBUG [org.jasig.cas.util.SimpleHttpClient] - <Attempting to access http://localhost:9080/cas1>
INFO [com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager] - <Audit trail record BEGIN
=============================================================
WHO: audit:unknown
WHAT: TGT-9-inxrphuRfIFpkbPTvNf6v1bAx7RlR7IMeMUFU0aokNCdbZ43Ij-cas01.example.org
ACTION: TICKET_GRANTING_TICKET_DESTROYED
APPLICATION: CAS
WHEN: Tue Feb 10 12:18:20 CET 2015
CLIENT IP ADDRESS: 192.168.13.164
SERVER IP ADDRESS: 192.168.13.164
=============================================================
DEBUG[org.jasig.cas.centralauthenticationserviceinpl]-
调试[org.jasig.cas.ticket.registry.DefaultTicketRegistry]-
调试[org.jasig.cas.ticket.registry.DefaultTicketRegistry]-
调试[org.jasig.cas.CentralAuthenticationServiceImpl]-
调试[org.jasig.cas.logout.SamlCompliantLogoutMessageCreator]-
调试[org.jasig.cas.logout.LogoutManagerImpl]-
调试[org.jasig.cas.util.SimpleHttpClient]-
调试[org.jasig.cas.logout.SamlCompliantLogoutMessageCreator]-
调试[org.jasig.cas.util.SimpleHttpClient]-
调试[org.jasig.cas.logout.LogoutManagerImpl]-
调试[org.jasig.cas.ticket.registry.DefaultTicketRegistry]-
调试[org.jasig.cas.ticket.registry.DefaultTicketRegistry]-
调试[org.jasig.cas.util.SimpleHttpClient]-

信息[com.github.inspektr.audit.support.Slf4jLoggingAuditTrailManager]-…我的错,正如预期的那样,我遗漏了一些东西。我必须在两个应用程序中都包含单一注销过滤器和侦听器:

    <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>
    <listener>    
        <listener-class>org.jasig.cas.client.session.SingleSignOutHttpSessionListener</listener-class>
    </listener>

    <filter>  
        <filter-name>CAS Authentication Filter</filter-name>  
        <filter-class>org.jasig.cas.client.authentication.AuthenticationFilter</filter-class>  
        <init-param>  
            <param-name>casServerLoginUrl</param-name>  
            <param-value>https://cas-server-host:8443/cas/login</param-value>  
        </init-param>  
        <init-param>  
            <param-name>service</param-name>  
            <param-value>http://localhost:9080/cas1</param-value>  
        </init-param>  
    </filter>
     <filter-mapping>  
        <filter-name>CAS Authentication Filter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  

    <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://cas-server-host:8443/cas/</param-value>  
        </init-param>  
        <init-param>  
            <param-name>service</param-name>  
            <param-value>http://localhost:9080/cas1</param-value>  
        </init-param>  
    </filter> 
    <filter-mapping>  
        <filter-name>CAS Validation Filter</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>   

    <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>

CAS单签出筛选器
org.jasig.cas.client.session.SingleSignOutFilter
CAS单签出筛选器
/*
org.jasig.cas.client.session.SingleSignOutHttpSessionListener
CAS认证过滤器
org.jasig.cas.client.authentication.AuthenticationFilter
卡塞尔洛基努尔酒店
https://cas-server-host:8443/cas/login  
服务
http://localhost:9080/cas1  
CAS认证过滤器
/*  
CAS验证过滤器
org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter
casServerUrlPrefix
https://cas-server-host:8443/cas/  
服务
http://localhost:9080/cas1  
CAS验证过滤器
/*  
CAS HttpServletRequest包装筛选器
org.jasig.cas.client.util.HttpServletRequestWrapperFilter
CAS HttpServletRequest包装筛选器
/*  

嘿,我也试过了。。但它仍然没有注销。。需要对cas webapp进行任何更改吗?这些标记是什么?这些URL指的是什么?服务localhost:9080/cas1该参数引用cas客户端应用程序。根据服务器发送注销请求的日志,我也可以查看@codependent。但是客户端会话没有失效。在客户端中是否有任何SAML依赖项?您的客户端应用程序中有错误吗?你知道这个单点登录是如何工作的吗?我指的是工作流程。你能分享一下你的deployerConfigContext.xml吗?能给我看看你的应用服务json文件吗。请提及为CAS客户端添加的外部依赖项。