add central logout support for springboot (#388)

* add dependence to generated metadata for springboot

* add central logout support for springboot
This commit is contained in:
Gahon 2019-11-07 15:56:45 +08:00 committed by Misagh Moayyed
parent cd67d874a2
commit 62cc93399f
4 changed files with 63 additions and 0 deletions

View File

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

View File

@ -58,6 +58,15 @@
<artifactId>spring-context</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
<version>${springboot.version}</version>
<scope>provided</scope>
</dependency>
<!-- Test dependencies -->
<dependency>
<groupId>org.jasig.cas.client</groupId>

View File

@ -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<String,String> 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<EventListener> casSingleSignOutListener(){
ServletListenerRegistrationBean<EventListener> singleSignOutListener = new ServletListenerRegistrationBean<>();
singleSignOutListener.setListener(new SingleSignOutHttpSessionListener());
singleSignOutListener.setOrder(Ordered.HIGHEST_PRECEDENCE);
return singleSignOutListener;
}
}

View File

@ -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;
}
}