diff --git a/spring-security-modules/pom.xml b/spring-security-modules/pom.xml
index 49a0db03ed..07c326c10e 100644
--- a/spring-security-modules/pom.xml
+++ b/spring-security-modules/pom.xml
@@ -17,6 +17,7 @@
spring-security-acl
spring-security-angular/server
spring-security-cache-control
+ spring-security-clear-site-data
spring-security-core
spring-security-cors
spring-security-kerberos
diff --git a/spring-security-modules/spring-security-clear-site-data/pom.xml b/spring-security-modules/spring-security-clear-site-data/pom.xml
new file mode 100644
index 0000000000..e58debc0aa
--- /dev/null
+++ b/spring-security-modules/spring-security-clear-site-data/pom.xml
@@ -0,0 +1,54 @@
+
+
+
+ 4.0.0
+
+ com.baeldung
+ spring-security-clear-site-data
+ 1.0-SNAPSHOT
+ spring-security-clear-site-data
+
+
+ com.baeldung
+ parent-boot-2
+ 0.0.1-SNAPSHOT
+ ../../parent-boot-2
+
+
+
+
+ org.springframework.security
+ spring-security-web
+ ${spring.mvc.version}
+
+
+ org.springframework.security
+ spring-security-config
+ ${spring.mvc.version}
+
+
+ org.springframework.security
+ spring-security-test
+ ${spring.mvc.version}
+ test
+
+
+ org.springframework
+ spring-webmvc
+ ${spring.mvc.version}
+
+
+ javax.servlet
+ javax.servlet-api
+ ${javax.version}
+
+
+
+
+
+ 5.2.2.RELEASE
+ 4.0.1
+
+
+
diff --git a/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/LogoutClearSiteDataController.java b/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/LogoutClearSiteDataController.java
new file mode 100644
index 0000000000..d27fa18116
--- /dev/null
+++ b/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/LogoutClearSiteDataController.java
@@ -0,0 +1,16 @@
+package com.baeldung;
+
+import org.springframework.http.ResponseEntity;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PathVariable;
+
+@Controller
+public class LogoutClearSiteDataController {
+
+ @GetMapping(value = "/baeldung/logout")
+ public ResponseEntity logout(@PathVariable String name) {
+ return ResponseEntity.ok().build();
+ }
+
+}
diff --git a/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/SpringSecurityConfig.java b/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/SpringSecurityConfig.java
new file mode 100644
index 0000000000..fd43fb2c9e
--- /dev/null
+++ b/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/SpringSecurityConfig.java
@@ -0,0 +1,35 @@
+package com.baeldung;
+
+
+import org.springframework.context.annotation.Configuration;
+import org.springframework.security.config.annotation.method.configuration.EnableGlobalMethodSecurity;
+import org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
+import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
+import org.springframework.security.web.authentication.logout.HeaderWriterLogoutHandler;
+import org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter;
+
+import static org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter.Directive.CACHE;
+import static org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter.Directive.COOKIES;
+import static org.springframework.security.web.header.writers.ClearSiteDataHeaderWriter.Directive.STORAGE;
+
+@Configuration
+@EnableWebSecurity
+@EnableGlobalMethodSecurity(prePostEnabled = true)
+public class SpringSecurityConfig extends WebSecurityConfigurerAdapter {
+
+ @Override
+ protected void configure(HttpSecurity http) throws Exception {
+
+ http.csrf()
+ .disable()
+ .formLogin()
+ .loginPage("/login.html")
+ .loginProcessingUrl("/perform_login")
+ .defaultSuccessUrl("/homepage.html", true)
+ .and()
+ .logout().logoutUrl("/baeldung/logout")
+ .addLogoutHandler(new HeaderWriterLogoutHandler(
+ new ClearSiteDataHeaderWriter(CACHE, COOKIES, STORAGE)));
+ }
+}
diff --git a/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/WebConfig.java b/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/WebConfig.java
new file mode 100644
index 0000000000..16826e28b8
--- /dev/null
+++ b/spring-security-modules/spring-security-clear-site-data/src/main/java/com/baeldung/WebConfig.java
@@ -0,0 +1,19 @@
+package com.baeldung;
+
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.http.CacheControl;
+import org.springframework.web.servlet.config.annotation.EnableWebMvc;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
+import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+import org.springframework.web.servlet.mvc.WebContentInterceptor;
+
+import java.util.concurrent.TimeUnit;
+
+@EnableWebMvc
+@Configuration
+@ComponentScan(basePackages = {"com.baeldung"})
+public class WebConfig implements WebMvcConfigurer {
+}
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-clear-site-data/src/test/java/com/baeldung/LogoutClearSiteDataControllerUnitTest.java b/spring-security-modules/spring-security-clear-site-data/src/test/java/com/baeldung/LogoutClearSiteDataControllerUnitTest.java
new file mode 100644
index 0000000000..905a866413
--- /dev/null
+++ b/spring-security-modules/spring-security-clear-site-data/src/test/java/com/baeldung/LogoutClearSiteDataControllerUnitTest.java
@@ -0,0 +1,47 @@
+package com.baeldung;
+
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.api.extension.ExtendWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.test.context.ContextConfiguration;
+import org.springframework.test.context.junit.jupiter.SpringExtension;
+import org.springframework.test.context.web.WebAppConfiguration;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
+import org.springframework.test.web.servlet.result.MockMvcResultHandlers;
+import org.springframework.test.web.servlet.result.MockMvcResultMatchers;
+import org.springframework.test.web.servlet.setup.MockMvcBuilders;
+import org.springframework.web.context.WebApplicationContext;
+import javax.servlet.Filter;
+
+@ExtendWith(SpringExtension.class)
+@WebAppConfiguration
+@ContextConfiguration(classes = {SpringSecurityConfig.class, WebConfig.class})
+public class LogoutClearSiteDataControllerUnitTest {
+
+ @Autowired
+ private WebApplicationContext wac;
+
+ @Autowired
+ private Filter springSecurityFilterChain;
+
+ private MockMvc mockMvc;
+
+ @BeforeEach
+ void setup() throws Exception {
+ this.mockMvc = MockMvcBuilders.webAppContextSetup(this.wac).addFilters(springSecurityFilterChain).build();
+ }
+
+ @Test
+ void whenResponseBody_thenReturnCacheHeader() throws Exception {
+ this.mockMvc
+ .perform(MockMvcRequestBuilders
+ .get("/baeldung/logout").secure(true))
+ .andDo(MockMvcResultHandlers.print())
+ .andExpect(MockMvcResultMatchers.status().is(302))
+ .andExpect(MockMvcResultMatchers.header()
+ .string("Clear-Site-Data", "\"cache\", \"cookies\", \"storage\""));
+ }
+
+}