From 908930799168785d4346a33fde7d0ce73f6c7dde Mon Sep 17 00:00:00 2001 From: wlesniak Date: Thu, 6 May 2021 16:06:09 +0100 Subject: [PATCH 1/3] BAEL-4564 Sample code for article filters vs spring handler interceptor --- .../spring-boot-mvc-3/README.md | 1 + .../FilterInterceptorApp.java | 12 +++++++ .../filtersinterceptors/HelloConroller.java | 19 ++++++++++ .../filtersinterceptors/LogFilter.java | 27 ++++++++++++++ .../filtersinterceptors/LogInterceptor.java | 36 +++++++++++++++++++ .../filtersinterceptors/WebMvcConfig.java | 21 +++++++++++ .../src/main/resources/templates/hello.html | 10 ++++++ 7 files changed, 126 insertions(+) create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java create mode 100644 spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html diff --git a/spring-boot-modules/spring-boot-mvc-3/README.md b/spring-boot-modules/spring-boot-mvc-3/README.md index bc3eb9e496..2c18acd70e 100644 --- a/spring-boot-modules/spring-boot-mvc-3/README.md +++ b/spring-boot-modules/spring-boot-mvc-3/README.md @@ -9,4 +9,5 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Spring MVC Async vs Spring WebFlux](https://www.baeldung.com/spring-mvc-async-vs-webflux) - [Differences in @Valid and @Validated Annotations in Spring](https://www.baeldung.com/spring-valid-vs-validated) - [CharacterEncodingFilter In SpringBoot](https://www.baeldung.com/spring-boot-characterencodingfilter) + [Difference Between Interceptors and Filters in Spring MVC](https://www.baeldung.com/difference-between-interceptors-and-filters-in-spring-mvc/) - More articles: [[prev -->]](/spring-boot-modules/spring-boot-mvc-2) diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java new file mode 100644 index 0000000000..e9ff9e8785 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java @@ -0,0 +1,12 @@ +package com.baeldung.filtersinterceptors; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.scheduling.annotation.EnableAsync; + +@SpringBootApplication(scanBasePackages = "com.baeldung.filtersinterceptors") +public class FilterInterceptorApp { + public static void main(String[] args) { + SpringApplication.run(FilterInterceptorApp.class, args); + } +} \ No newline at end of file diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java new file mode 100644 index 0000000000..bb3fdfe179 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java @@ -0,0 +1,19 @@ +package com.baeldung.filtersinterceptors; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Controller; +import org.springframework.web.bind.annotation.GetMapping; + +@Controller +public class HelloConroller { + + private Logger logger = LoggerFactory.getLogger(HelloConroller.class); + + @GetMapping("/hello") + public String hello() { + logger.info("Hello from the controller"); + return "hello"; + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java new file mode 100644 index 0000000000..59774d4771 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java @@ -0,0 +1,27 @@ +package com.baeldung.filtersinterceptors; + +import java.io.IOException; + +import javax.servlet.Filter; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.ServletRequest; +import javax.servlet.ServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class LogFilter implements Filter { + + private Logger logger = LoggerFactory.getLogger(LogFilter.class); + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) + throws IOException, ServletException { + logger.info("Hello from: "+request.getLocalAddr()); + chain.doFilter(request, response); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java new file mode 100644 index 0000000000..89e82dd004 --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java @@ -0,0 +1,36 @@ +package com.baeldung.filtersinterceptors; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.HandlerInterceptor; +import org.springframework.web.servlet.ModelAndView; + +@Component +public class LogInterceptor implements HandlerInterceptor{ + + private Logger logger = LoggerFactory.getLogger(LogInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) + throws Exception { + logger.info("preHandle"); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, + ModelAndView modelAndView) throws Exception { + logger.info("postHandle"); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) + throws Exception { + logger.info("afterCompletion"); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java new file mode 100644 index 0000000000..460651ebfb --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java @@ -0,0 +1,21 @@ +package com.baeldung.filtersinterceptors; + +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +@Configuration +public class WebMvcConfig implements WebMvcConfigurer { + + private final LogInterceptor logInterceptor; + + public WebMvcConfig(LogInterceptor logInterceptor) { + this.logInterceptor = new LogInterceptor(); + } + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(logInterceptor).addPathPatterns("/**"); + } + +} diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html b/spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html new file mode 100644 index 0000000000..9a9b0e707b --- /dev/null +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/resources/templates/hello.html @@ -0,0 +1,10 @@ + + + +Spring Filters vs Interceptors + + + +

Hello

+ + \ No newline at end of file From 8e5ebe813c48653cb4af2cb6d68e17aa6675738f Mon Sep 17 00:00:00 2001 From: wlesniak Date: Thu, 6 May 2021 16:18:12 +0100 Subject: [PATCH 2/3] BAEL-4564 fixed code formatting --- .../FilterInterceptorApp.java | 1 - .../filtersinterceptors/HelloConroller.java | 18 ++++---- .../filtersinterceptors/LogFilter.java | 15 ++++--- .../filtersinterceptors/LogInterceptor.java | 42 +++++++++---------- .../filtersinterceptors/WebMvcConfig.java | 18 +++----- 5 files changed, 41 insertions(+), 53 deletions(-) diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java index e9ff9e8785..b1e6badd43 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/FilterInterceptorApp.java @@ -2,7 +2,6 @@ package com.baeldung.filtersinterceptors; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; -import org.springframework.scheduling.annotation.EnableAsync; @SpringBootApplication(scanBasePackages = "com.baeldung.filtersinterceptors") public class FilterInterceptorApp { diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java index bb3fdfe179..db2da63d43 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/HelloConroller.java @@ -7,13 +7,13 @@ import org.springframework.web.bind.annotation.GetMapping; @Controller public class HelloConroller { - - private Logger logger = LoggerFactory.getLogger(HelloConroller.class); - - @GetMapping("/hello") - public String hello() { - logger.info("Hello from the controller"); - return "hello"; - } - + + private Logger logger = LoggerFactory.getLogger(HelloConroller.class); + + @GetMapping("/hello") + public String hello() { + logger.info("Hello from the controller"); + return "hello"; + } + } diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java index 59774d4771..dc78cfbbb9 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogFilter.java @@ -15,13 +15,12 @@ import org.springframework.stereotype.Component; @Component public class LogFilter implements Filter { - private Logger logger = LoggerFactory.getLogger(LogFilter.class); - - @Override - public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) - throws IOException, ServletException { - logger.info("Hello from: "+request.getLocalAddr()); - chain.doFilter(request, response); - } + private Logger logger = LoggerFactory.getLogger(LogFilter.class); + + @Override + public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { + logger.info("Hello from: " + request.getLocalAddr()); + chain.doFilter(request, response); + } } diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java index 89e82dd004..b43b69415a 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/LogInterceptor.java @@ -9,28 +9,24 @@ import org.springframework.stereotype.Component; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; -@Component -public class LogInterceptor implements HandlerInterceptor{ +public class LogInterceptor implements HandlerInterceptor { + + private Logger logger = LoggerFactory.getLogger(LogInterceptor.class); + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + logger.info("preHandle"); + return true; + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + logger.info("postHandle"); + } + + @Override + public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { + logger.info("afterCompletion"); + } - private Logger logger = LoggerFactory.getLogger(LogInterceptor.class); - - @Override - public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) - throws Exception { - logger.info("preHandle"); - return true; - } - - @Override - public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, - ModelAndView modelAndView) throws Exception { - logger.info("postHandle"); - } - - @Override - public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) - throws Exception { - logger.info("afterCompletion"); - } - } diff --git a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java index 460651ebfb..9f4c1c2166 100644 --- a/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java +++ b/spring-boot-modules/spring-boot-mvc-3/src/main/java/com/baeldung/filtersinterceptors/WebMvcConfig.java @@ -5,17 +5,11 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration -public class WebMvcConfig implements WebMvcConfigurer { +public class WebMvcConfig implements WebMvcConfigurer { + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(new LogInterceptor()); + } - private final LogInterceptor logInterceptor; - - public WebMvcConfig(LogInterceptor logInterceptor) { - this.logInterceptor = new LogInterceptor(); - } - - @Override - public void addInterceptors(InterceptorRegistry registry) { - registry.addInterceptor(logInterceptor).addPathPatterns("/**"); - } - } From 26992a22c2dc3e0db94350eaf9e0bcdaf09afa78 Mon Sep 17 00:00:00 2001 From: wlesniak Date: Sat, 8 May 2021 21:55:18 +0100 Subject: [PATCH 3/3] BAEL-4564 revertt readme file as it will be auto updated --- spring-boot-modules/spring-boot-mvc-3/README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/spring-boot-modules/spring-boot-mvc-3/README.md b/spring-boot-modules/spring-boot-mvc-3/README.md index 2c18acd70e..bc3eb9e496 100644 --- a/spring-boot-modules/spring-boot-mvc-3/README.md +++ b/spring-boot-modules/spring-boot-mvc-3/README.md @@ -9,5 +9,4 @@ This module contains articles about Spring Web MVC in Spring Boot projects. - [Spring MVC Async vs Spring WebFlux](https://www.baeldung.com/spring-mvc-async-vs-webflux) - [Differences in @Valid and @Validated Annotations in Spring](https://www.baeldung.com/spring-valid-vs-validated) - [CharacterEncodingFilter In SpringBoot](https://www.baeldung.com/spring-boot-characterencodingfilter) - [Difference Between Interceptors and Filters in Spring MVC](https://www.baeldung.com/difference-between-interceptors-and-filters-in-spring-mvc/) - More articles: [[prev -->]](/spring-boot-modules/spring-boot-mvc-2)