diff --git a/springboot2-request-logger/README.md b/springboot2-request-logger/README.md index 5a225b5..158621c 100644 --- a/springboot2-request-logger/README.md +++ b/springboot2-request-logger/README.md @@ -62,3 +62,54 @@ You may run [testControllerLoggingWithFilter](./src/test/java/com/bvn13/example/ So our goal is achieved. We can see all files we request and not existing file too. + +## Building a Handler Interceptor + +Handler interceptors have more power to process your requests since they handle not the fact of request but its events: before request, after request, after completion. + +You can check out Spring class `org.springframework.web.servlet.handler.HandlerInterceptorAdapter` to see its methods we are able to implement in our handler. + +Lets [our handler](/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/RequestLoggingHandler.java) implement `preHandle` and `postHandle` events: + +```java + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + log.debug( + String.format("HANDLER(pre) URL: %s", request.getRequestURI()) + ); + + return super.preHandle(request, response, handler); + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + log.debug( + String.format("HANDLER(post) URL: %s", request.getRequestURI()) + ); + + super.postHandle(request, response, handler, modelAndView); + } +``` + +But the handler will not work until we actually tell Spring to use it. We must build a [configuration](/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/WebApplicationConfiguration.java) to enable our handler. + +```java +@Configuration +public class WebApplicationConfiguration implements WebMvcConfigurer { + + @Setter(onMethod_ = @Autowired) + private RequestLoggingHandler requestLogger; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(requestLogger); + } +} +``` + +### Result + +Lets start our test to check out the result! + +![](./img/2019-09-30_23-25.png) + diff --git a/springboot2-request-logger/img/2019-09-30_23-25.png b/springboot2-request-logger/img/2019-09-30_23-25.png new file mode 100644 index 0000000..1536dab Binary files /dev/null and b/springboot2-request-logger/img/2019-09-30_23-25.png differ diff --git a/springboot2-request-logger/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/RequestLoggingHandler.java b/springboot2-request-logger/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/RequestLoggingHandler.java new file mode 100644 index 0000000..a8dddee --- /dev/null +++ b/springboot2-request-logger/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/RequestLoggingHandler.java @@ -0,0 +1,36 @@ +package com.bvn13.example.springboot.springrequestlogger.handlers; + +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.servlet.ModelAndView; +import org.springframework.web.servlet.handler.HandlerInterceptorAdapter; + +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +/** + * @author bvn13 + * @since 30.09.2019 + */ +@Slf4j +@Component +public class RequestLoggingHandler extends HandlerInterceptorAdapter { + + @Override + public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { + log.debug( + String.format("HANDLER(pre) URL: %s", request.getRequestURI()) + ); + + return super.preHandle(request, response, handler); + } + + @Override + public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { + log.debug( + String.format("HANDLER(post) URL: %s", request.getRequestURI()) + ); + + super.postHandle(request, response, handler, modelAndView); + } +} diff --git a/springboot2-request-logger/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/WebApplicationConfiguration.java b/springboot2-request-logger/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/WebApplicationConfiguration.java new file mode 100644 index 0000000..8ffe783 --- /dev/null +++ b/springboot2-request-logger/src/main/java/com/bvn13/example/springboot/springrequestlogger/handlers/WebApplicationConfiguration.java @@ -0,0 +1,23 @@ +package com.bvn13.example.springboot.springrequestlogger.handlers; + +import lombok.Setter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.servlet.config.annotation.InterceptorRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; + +/** + * @author bvn13 + * @since 30.09.2019 + */ +@Configuration +public class WebApplicationConfiguration implements WebMvcConfigurer { + + @Setter(onMethod_ = @Autowired) + private RequestLoggingHandler requestLogger; + + @Override + public void addInterceptors(InterceptorRegistry registry) { + registry.addInterceptor(requestLogger); + } +}