如何在 Spring Boot 应用程序中注册 JavaEE 过滤器?
How to register a JavaEE filter in your Spring Boot application?
我在基于 Spring Boot
的 REST
应用程序中有以下 Spring Boot
控制器和 JavaEE
过滤器 类。请注意,我这里没有配置web.xml
。
http://localhost:8080/api/products -> Returns 200
问题是 interceptor/filter 永远不会被调用。
ProductController.java
@RestController
@RequestMapping("/api")
public class ProductController {
@Inject
private ProductService productService;
//URI: http://localhost:8080/api/products
@RequestMapping(value = "/products", method = RequestMethod.GET)
public ResponseEntity<Iterable<Product>> getAllProducts() {
Iterable<Product> products = productService.getAllProducts();
return new ResponseEntity<>(products, HttpStatus.OK);
}
//URI: http://localhost:8080/api/products/50
@RequestMapping(value = "/products/{productId}", method = RequestMethod.GET)
public ResponseEntity<?> getProduct(@PathVariable Long productId) {
Product product = productService.getProduct(productId);
return new ResponseEntity<>(product, HttpStatus.OK);
}
}
SecurityFilter.java
@WebFilter(urlPatterns = {"/api/products/*"})
public class SecurityFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//in the init method
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//THIS METHOD NEVER GETS CALLED AND HENCE THIS NEVER GETS PRINTED ON CONSOLE.
//WHY ?????
System.out.println("**********Into the doFilter() method...........");
final HttpServletRequest httpRequest = (HttpServletRequest) request;
final HttpServletResponse httpResponse = (HttpServletResponse) response;
//move ahead
chain.doFilter(httpRequest, httpResponse);
}
@Override
public void destroy() {
//nothing to implement
}
}
BasicRestApplication.java
@SpringBootApplication
public class BasicRestApplication {
public static void main(String[] args) {
SpringApplication.run(BasicRestApplication.class, args);
}
}
我已经完成了这个 link How to add a filter class in Spring Boot? 但它并没有清楚地说明需要添加什么 用 Spring Boot
.[=22= 注册过滤器]
从这里找到解决方案Add a Servlet Filter in a Spring Boot application
创建了新配置 class 并注册了过滤器 class。
@Configuration
public class ApplicationConfig {
@Bean
public Filter securityFilter() {
return new SecurityFilter();
}
}
我在基于 Spring Boot
的 REST
应用程序中有以下 Spring Boot
控制器和 JavaEE
过滤器 类。请注意,我这里没有配置web.xml
。
http://localhost:8080/api/products -> Returns 200
问题是 interceptor/filter 永远不会被调用。
ProductController.java
@RestController
@RequestMapping("/api")
public class ProductController {
@Inject
private ProductService productService;
//URI: http://localhost:8080/api/products
@RequestMapping(value = "/products", method = RequestMethod.GET)
public ResponseEntity<Iterable<Product>> getAllProducts() {
Iterable<Product> products = productService.getAllProducts();
return new ResponseEntity<>(products, HttpStatus.OK);
}
//URI: http://localhost:8080/api/products/50
@RequestMapping(value = "/products/{productId}", method = RequestMethod.GET)
public ResponseEntity<?> getProduct(@PathVariable Long productId) {
Product product = productService.getProduct(productId);
return new ResponseEntity<>(product, HttpStatus.OK);
}
}
SecurityFilter.java
@WebFilter(urlPatterns = {"/api/products/*"})
public class SecurityFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
//in the init method
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
//THIS METHOD NEVER GETS CALLED AND HENCE THIS NEVER GETS PRINTED ON CONSOLE.
//WHY ?????
System.out.println("**********Into the doFilter() method...........");
final HttpServletRequest httpRequest = (HttpServletRequest) request;
final HttpServletResponse httpResponse = (HttpServletResponse) response;
//move ahead
chain.doFilter(httpRequest, httpResponse);
}
@Override
public void destroy() {
//nothing to implement
}
}
BasicRestApplication.java
@SpringBootApplication
public class BasicRestApplication {
public static void main(String[] args) {
SpringApplication.run(BasicRestApplication.class, args);
}
}
我已经完成了这个 link How to add a filter class in Spring Boot? 但它并没有清楚地说明需要添加什么 用 Spring Boot
.[=22= 注册过滤器]
从这里找到解决方案Add a Servlet Filter in a Spring Boot application
创建了新配置 class 并注册了过滤器 class。
@Configuration
public class ApplicationConfig {
@Bean
public Filter securityFilter() {
return new SecurityFilter();
}
}