diff --git a/README.md b/README.md
index 65785ce..24537ce 100644
--- a/README.md
+++ b/README.md
@@ -723,6 +723,7 @@ cas.validation-type=SAML
### Available optional properties
+* `cas.single-logout.enabled`
* `cas.authentication-url-patterns`
* `cas.validation-url-patterns`
* `cas.request-wrapper-url-patterns`
diff --git a/cas-client-support-springboot/pom.xml b/cas-client-support-springboot/pom.xml
index 29b8610..3dd32ce 100644
--- a/cas-client-support-springboot/pom.xml
+++ b/cas-client-support-springboot/pom.xml
@@ -58,6 +58,15 @@
spring-context
provided
+
+
+ org.springframework.boot
+ spring-boot-configuration-processor
+ true
+ ${springboot.version}
+ provided
+
+
org.jasig.cas.client
diff --git a/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfiguration.java b/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfiguration.java
index bbd2ebc..a57dc8d 100644
--- a/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfiguration.java
+++ b/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfiguration.java
@@ -20,6 +20,8 @@ package org.jasig.cas.client.boot.configuration;
import org.jasig.cas.client.authentication.AuthenticationFilter;
import org.jasig.cas.client.authentication.Saml11AuthenticationFilter;
+import org.jasig.cas.client.session.SingleSignOutFilter;
+import org.jasig.cas.client.session.SingleSignOutHttpSessionListener;
import org.jasig.cas.client.util.AssertionThreadLocalFilter;
import org.jasig.cas.client.util.HttpServletRequestWrapperFilter;
import org.jasig.cas.client.validation.Cas20ProxyReceivingTicketValidationFilter;
@@ -29,8 +31,10 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
+import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
+import org.springframework.core.Ordered;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
@@ -40,6 +44,7 @@ import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import java.util.EventListener;
/**
* Configuration class providing default CAS client infrastructure filters.
@@ -199,4 +204,25 @@ public class CasClientConfiguration {
}
this.casClientConfigurer = configurers.iterator().next();
}
+
+ @Bean
+ @ConditionalOnProperty(prefix = "cas", value = "single-logout.enabled", havingValue = "true")
+ public FilterRegistrationBean casSingleSignOutFilter() {
+ final FilterRegistrationBean singleSignOutFilter = new FilterRegistrationBean();
+ singleSignOutFilter.setFilter(new SingleSignOutFilter());
+ Map initParameters = new HashMap<>(1);
+ initParameters.put("casServerUrlPrefix", configProps.getServerUrlPrefix());
+ singleSignOutFilter.setInitParameters(initParameters);
+ singleSignOutFilter.setOrder(Ordered.HIGHEST_PRECEDENCE);
+ return singleSignOutFilter;
+ }
+
+ @Bean
+ @ConditionalOnProperty(prefix = "cas", value = "single-logout.enabled", havingValue = "true")
+ public ServletListenerRegistrationBean casSingleSignOutListener(){
+ ServletListenerRegistrationBean singleSignOutListener = new ServletListenerRegistrationBean<>();
+ singleSignOutListener.setListener(new SingleSignOutHttpSessionListener());
+ singleSignOutListener.setOrder(Ordered.HIGHEST_PRECEDENCE);
+ return singleSignOutListener;
+ }
}
diff --git a/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfigurationProperties.java b/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfigurationProperties.java
index 614c4ea..1ed713c 100644
--- a/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfigurationProperties.java
+++ b/cas-client-support-springboot/src/main/java/org/jasig/cas/client/boot/configuration/CasClientConfigurationProperties.java
@@ -115,6 +115,24 @@ public class CasClientConfigurationProperties {
private Boolean skipTicketValidation = false;
+ private SingleLogout singleLogout;
+
+ public static class SingleLogout{
+ /**
+ * whether to receive the single logout request from cas server.
+ */
+ private boolean enabled = false;
+
+ public boolean isEnabled() {
+ return enabled;
+ }
+
+ public void setEnabled(boolean enabled) {
+ this.enabled = enabled;
+ }
+ }
+
+
public String getServerUrlPrefix() {
return serverUrlPrefix;
}
@@ -242,4 +260,13 @@ public class CasClientConfigurationProperties {
public void setSkipTicketValidation(final Boolean skipTicketValidation) {
this.skipTicketValidation = skipTicketValidation;
}
+
+ public SingleLogout getSingleLogout() {
+ return singleLogout;
+ }
+
+ public void setSingleLogout(SingleLogout singleLogout) {
+ this.singleLogout = singleLogout;
+ }
+
}