我改写了问题并删除了旧问题。希望我现在能得到答案。
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>
有什么建议吗?
答案 0 :(得分:3)
与CAS SLO有相同的情况(403状态代码),在我的春季安全日志中我发现:
Invalid CSRF token found for http://localhost:8080/j_spring_cas_security_check
所以我在我的安全配置中禁用了csrf过滤器:
http.csrf().disable();
这可能不是一个好习惯,只是一个现在适合我的快速解决方案。如果我在其他受保护的应用程序中启动SLO,我也可以获得正确的csrf令牌。