diff --git a/spring-security-modules/spring-security-mvc/pom.xml b/spring-security-modules/spring-security-mvc/pom.xml
index 7da047707a..517aa83270 100644
--- a/spring-security-modules/spring-security-mvc/pom.xml
+++ b/spring-security-modules/spring-security-mvc/pom.xml
@@ -64,9 +64,36 @@
org.springframework.security
spring-security-test
+ ${spring.mvc.version}
test
+
+ org.springframework.security
+ spring-security-web
+ ${spring.mvc.version}
+
+
+ org.springframework.security
+ spring-security-config
+ ${spring.mvc.version}
+
+
+ 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-mvc/src/main/java/com/baeldung/clearsitedata/LogoutClearSiteDataController.java b/spring-security-modules/spring-security-mvc/src/main/java/com/baeldung/clearsitedata/LogoutClearSiteDataController.java
new file mode 100644
index 0000000000..fcf78ac82f
--- /dev/null
+++ b/spring-security-modules/spring-security-mvc/src/main/java/com/baeldung/clearsitedata/LogoutClearSiteDataController.java
@@ -0,0 +1,16 @@
+package com.baeldung.clearsitedata;
+
+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-mvc/src/main/java/com/baeldung/clearsitedata/SpringSecurityConfig.java b/spring-security-modules/spring-security-mvc/src/main/java/com/baeldung/clearsitedata/SpringSecurityConfig.java
new file mode 100644
index 0000000000..13011da9e4
--- /dev/null
+++ b/spring-security-modules/spring-security-mvc/src/main/java/com/baeldung/clearsitedata/SpringSecurityConfig.java
@@ -0,0 +1,35 @@
+package com.baeldung.clearsitedata;
+
+
+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-mvc/src/main/java/com/baeldung/clearsitedata/WebConfig.java b/spring-security-modules/spring-security-mvc/src/main/java/com/baeldung/clearsitedata/WebConfig.java
new file mode 100644
index 0000000000..a523efa554
--- /dev/null
+++ b/spring-security-modules/spring-security-mvc/src/main/java/com/baeldung/clearsitedata/WebConfig.java
@@ -0,0 +1,19 @@
+package com.baeldung.clearsitedata;
+
+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.clearsitedata"})
+public class WebConfig implements WebMvcConfigurer {
+}
\ No newline at end of file
diff --git a/spring-security-modules/spring-security-mvc/src/test/java/com/baeldung/clearsitedata/LogoutClearSiteDataControllerUnitTest.java b/spring-security-modules/spring-security-mvc/src/test/java/com/baeldung/clearsitedata/LogoutClearSiteDataControllerUnitTest.java
new file mode 100644
index 0000000000..30036eea89
--- /dev/null
+++ b/spring-security-modules/spring-security-mvc/src/test/java/com/baeldung/clearsitedata/LogoutClearSiteDataControllerUnitTest.java
@@ -0,0 +1,47 @@
+package com.baeldung.clearsitedata;
+
+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\""));
+ }
+
+}