BAEL-3223: Excluding URLs for a Filter in a Spring Web Application
This commit is contained in:
parent
9ad7ed0e2f
commit
b53d41f977
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
|
@ -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<String> getHelpLineNumber() {
|
||||
String helplineNumber = faqService.getHelpLineNumber();
|
||||
if (helplineNumber != null) {
|
||||
return new ResponseEntity<String>(helplineNumber, HttpStatus.OK);
|
||||
} else {
|
||||
return new ResponseEntity<String>("Unavailable", HttpStatus.NOT_FOUND);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -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<String> pingGet() {
|
||||
return new ResponseEntity<String>("pong", HttpStatus.OK);
|
||||
}
|
||||
|
||||
@RequestMapping(value = "/health", method = RequestMethod.POST)
|
||||
public ResponseEntity<String> pingPost() {
|
||||
return new ResponseEntity<String>("pong", HttpStatus.OK);
|
||||
}
|
||||
|
||||
}
|
|
@ -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> logFilter() {
|
||||
FilterRegistrationBean<LogFilter> registrationBean = new FilterRegistrationBean<>();
|
||||
registrationBean.setFilter(new LogFilter());
|
||||
registrationBean.addUrlPatterns("/health", "/faq/*");
|
||||
return registrationBean;
|
||||
}
|
||||
|
||||
|
||||
@Bean
|
||||
public FilterRegistrationBean<HeaderValidatorFilter> headerValidatorFilter() {
|
||||
FilterRegistrationBean<HeaderValidatorFilter> registrationBean = new FilterRegistrationBean<>();
|
||||
registrationBean.setFilter(new HeaderValidatorFilter());
|
||||
registrationBean.addUrlPatterns("*");
|
||||
return registrationBean;
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -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);
|
||||
}
|
||||
}
|
|
@ -0,0 +1,5 @@
|
|||
package com.baeldung.exclude_urls_filter.service;
|
||||
|
||||
public interface FAQService {
|
||||
String getHelpLineNumber();
|
||||
}
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in New Issue