CAS单一注销回调命中403(禁止)

时间:2014-09-09 09:30:47

标签: java spring cas

我改写了问题并删除了旧问题。希望我现在能得到答案。

CAS服务器尝试在SLO上向受保护的应用程序发送回调请求:

<Error Sending message to url endpoint [http://localhost:8080/j_spring_cas_security_check]. Error is [Server returned HTTP response code: 403 for URL: http://localhost:8080/j_spring_cas_security_check]>

在调试时,org.jasig.cas.client.session.SingleSignOutFilter永远不会被击中。

@Override
    public void configure(HttpSecurity http) throws Exception {
        http.
                addFilter(casFilter()).
                addFilterBefore(requestSingleLogoutFilter(), LogoutFilter.class).
                addFilterBefore(singleSignOutFilter(), CasAuthenticationFilter.class)
                .logout().permitAll().logoutSuccessUrl("http://localhost:8080/j_spring_cas_security_logout").invalidateHttpSession(true).and()
                .authorizeRequests().antMatchers("/home2").hasAuthority("USER").and()
                .exceptionHandling()
                .authenticationEntryPoint(casEntryPoint)
                .and()
                .httpBasic();
    }


Filter casFilter() {
    CasAuthenticationFilter casAuthenticationFilter = new CasAuthenticationFilter();
    casAuthenticationFilter.setServiceProperties(getServiceProperties());
    casAuthenticationFilter.setAuthenticationManager(getProviderManager());
    return casAuthenticationFilter;

}

LogoutFilter requestSingleLogoutFilter() {
    LogoutFilter logoutFilter = new LogoutFilter("http://localhost:8089/cas/logout",
            new SecurityContextLogoutHandler());
    logoutFilter.setFilterProcessesUrl("/j_spring_cas_security_logout");
    return logoutFilter;
}


SingleSignOutFilter singleSignOutFilter() {
    SingleSignOutFilter singleSignOutFilter = new SingleSignOutFilter();
    return singleSignOutFilter;
}

 @Override
public void onStartup(ServletContext servletContext) throws ServletException {
    servletContext.addListener(new   org.jasig.cas.client.session.SingleSignOutHttpSessionListener());
}

除了退出外,我还有其他一切。目前,由于LogoutFilter会导致会话无效,因此会破坏故障单(重定向到CAS)但是如果SLO请求将从其他受保护的应用程序发送,显然它对此应用程序没有影响(因为sessionid仍然在这里)。 / p>

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

与CAS SLO有相同的情况(403状态代码),在我的春季安全日志中我发现:

Invalid CSRF token found for http://localhost:8080/j_spring_cas_security_check

所以我在我的安全配置中禁用了csrf过滤器:

http.csrf().disable();

这可能不是一个好习惯,只是一个现在适合我的快速解决方案。如果我在其他受保护的应用程序中启动SLO,我也可以获得正确的csrf令牌。