2017-02-22 8 views
0

У меня есть следующие контроллеры Spring Boot и классы фильтра JavaEE в моем Spring Boot на основе приложения REST. Обратите внимание, что здесь нет web.xml.Как зарегистрировать фильтр JavaEE в приложении Spring Boot?

http://localhost:8080/api/products -> Returns 200 

Проблема в том, что перехватчик/фильтр никогда не вызываются.

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); 
    } 

} 

Я прошел через эту ссылку How to add a filter class in Spring Boot?, но не дает четкого представления о том, что нужно добавить, где зарегистрировать фильтр с помощью Spring Boot.

ответ

0

Найдено решение отсюда Add a Servlet Filter in a Spring Boot application

Создан новый класс конфигурации и зарегистрировал класс фильтра.

@Configuration 
public class ApplicationConfig { 

    @Bean 
    public Filter securityFilter() { 
     return new SecurityFilter(); 
    } 

} 
Смежные вопросы