diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/Application.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/Application.java new file mode 100644 index 0000000000..4fb6938694 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/Application.java @@ -0,0 +1,17 @@ +package com.baeldung.exclude_urls_filter; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.annotation.ComponentScan; +import org.springframework.context.annotation.Configuration; + +@ComponentScan(basePackages = "com.baeldung.exclude_urls_filter") +@Configuration +@SpringBootApplication +public class Application { + + public static void main(String[] args) { + SpringApplication.run(Application.class, args); + } + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/controller/FAQController.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/controller/FAQController.java new file mode 100644 index 0000000000..1463af6bfd --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/controller/FAQController.java @@ -0,0 +1,32 @@ +package com.baeldung.exclude_urls_filter.controller; + +import com.baeldung.exclude_urls_filter.service.FAQService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class FAQController { + + private final FAQService faqService; + + @Autowired + public FAQController(FAQService faqService) { + this.faqService = faqService; + } + + @RequestMapping(value = "/faq/helpline", method = RequestMethod.GET) + public ResponseEntity getHelpLineNumber() { + String helplineNumber = faqService.getHelpLineNumber(); + if (helplineNumber != null) { + return new ResponseEntity(helplineNumber, HttpStatus.OK); + } else { + return new ResponseEntity("Unavailable", HttpStatus.NOT_FOUND); + } + } + + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/controller/Ping.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/controller/Ping.java new file mode 100644 index 0000000000..c8a0723ba6 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/controller/Ping.java @@ -0,0 +1,22 @@ +package com.baeldung.exclude_urls_filter.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestMethod; +import org.springframework.web.bind.annotation.RestController; + +@RestController +public class Ping { + + @RequestMapping(value = "/health", method = RequestMethod.GET) + public ResponseEntity pingGet() { + return new ResponseEntity("pong", HttpStatus.OK); + } + + @RequestMapping(value = "/health", method = RequestMethod.POST) + public ResponseEntity pingPost() { + return new ResponseEntity("pong", HttpStatus.OK); + } + +} diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/FilterRegistrationConfig.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/FilterRegistrationConfig.java new file mode 100644 index 0000000000..ff99b4cc25 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/FilterRegistrationConfig.java @@ -0,0 +1,26 @@ +package com.baeldung.exclude_urls_filter.filter; + +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class FilterRegistrationConfig { + + @Bean + public FilterRegistrationBean logFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new LogFilter()); + registrationBean.addUrlPatterns("/health", "/faq/*"); + return registrationBean; + } + + + @Bean + public FilterRegistrationBean headerValidatorFilter() { + FilterRegistrationBean registrationBean = new FilterRegistrationBean<>(); + registrationBean.setFilter(new HeaderValidatorFilter()); + registrationBean.addUrlPatterns("*"); + return registrationBean; + } +} \ No newline at end of file diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/HeaderValidatorFilter.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/HeaderValidatorFilter.java new file mode 100644 index 0000000000..2af90badae --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/HeaderValidatorFilter.java @@ -0,0 +1,30 @@ +package com.baeldung.exclude_urls_filter.filter; + +import org.springframework.core.annotation.Order; +import org.springframework.http.HttpStatus; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Order(1) +public class HeaderValidatorFilter extends OncePerRequestFilter { + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) + throws ServletException, IOException { + String path = request.getRequestURI(); + if ("/health".equals(path)) { + filterChain.doFilter(request, response); + return; + } + String countryCode = request.getHeader("X-Country-Code"); + if (!"US".equals(countryCode)) { + response.sendError(HttpStatus.BAD_REQUEST.value(), "Invalid Locale"); + return; + } + + filterChain.doFilter(request, response); + } +} \ No newline at end of file diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/LogFilter.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/LogFilter.java new file mode 100644 index 0000000000..fcde4f7f8f --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/filter/LogFilter.java @@ -0,0 +1,25 @@ +package com.baeldung.exclude_urls_filter.filter; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.core.annotation.Order; +import org.springframework.web.filter.OncePerRequestFilter; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; + +@Order(1) +public class LogFilter extends OncePerRequestFilter { + private final Logger logger = LoggerFactory.getLogger(LogFilter.class); + + @Override + protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, + FilterChain filterChain) throws ServletException, IOException { + String path = request.getRequestURI(); + String contentType = request.getContentType(); + logger.info("Request URL path : {}, Request content type: {}", path, contentType); + filterChain.doFilter(request, response); + } +} \ No newline at end of file diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/service/FAQService.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/service/FAQService.java new file mode 100644 index 0000000000..a2949ea0a2 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/service/FAQService.java @@ -0,0 +1,5 @@ +package com.baeldung.exclude_urls_filter.service; + +public interface FAQService { + String getHelpLineNumber(); +} \ No newline at end of file diff --git a/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/service/FAQServiceImpl.java b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/service/FAQServiceImpl.java new file mode 100644 index 0000000000..6f841e4ec1 --- /dev/null +++ b/spring-mvc-simple-2/src/main/java/com/baeldung/exclude_urls_filter/service/FAQServiceImpl.java @@ -0,0 +1,15 @@ +package com.baeldung.exclude_urls_filter.service; + +import org.springframework.stereotype.Service; + +@Service +public class FAQServiceImpl implements FAQService { + + private static final String HELPLINE_NUMBER = "+1 888-777-66"; + + @Override + public String getHelpLineNumber() { + return HELPLINE_NUMBER; + } + +}