Рубрики
Без рубрики

Как определить фильтр весенней загрузки?

Быстрое и практичное руководство по определению пользовательского фильтра Spring Boot.

Автор оригинала: baeldung.

Как определить фильтр весенней загрузки?

1. Обзор

В этом быстром учебнике мы изумим, как определить пользовательские фильтры и указать порядок их вызова с помощью Spring Boot.

Дальнейшее чтение:

Найти зарегистрированные фильтры безопасности весны

Настройка веб-приложения Spring Boot

2. Определение фильтров и порядка вызова

Начнем с создания двух фильтров:

  1. ТранзакцияФильтр – для запуска и совершения транзакций
  2. ЗапросРеспонсЛогингФильтр – для регистрации запросов и ответов

Для того, чтобы создать фильтр, мы должны просто реализовать Фильтр интерфейс:

@Component
@Order(1)
public class TransactionFilter implements Filter {

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) throws IOException, ServletException {
 
        HttpServletRequest req = (HttpServletRequest) request;
        LOG.info(
          "Starting a transaction for req : {}", 
          req.getRequestURI());
 
        chain.doFilter(request, response);
        LOG.info(
          "Committing a transaction for req : {}", 
          req.getRequestURI());
    }

    // other methods 
}

@Component
@Order(2)
public class RequestResponseLoggingFilter implements Filter {

    @Override
    public void doFilter(
      ServletRequest request, 
      ServletResponse response, 
      FilterChain chain) throws IOException, ServletException {
 
        HttpServletRequest req = (HttpServletRequest) request;
        HttpServletResponse res = (HttpServletResponse) response;
        LOG.info(
          "Logging Request  {} : {}", req.getMethod(), 
          req.getRequestURI());
        chain.doFilter(request, response);
        LOG.info(
          "Logging Response :{}", 
          res.getContentType());
    }

    // other methods
}

Для того, чтобы Весна могла распознавать фильтр, нам нужно было определить его как фасоль с @Component аннотация.

И, чтобы фильтры огонь в правильном порядке – мы должны были использовать @Order аннотация.

2.1. Фильтр с URL-шаблоном

В приведенном выше примере наши фильтры регистрируются по умолчанию для всех URL-адресов в нашем приложении. Тем не менее, иногда мы можем захотеть, чтобы фильтр применяется только к определенным шаблонам URL.

В этом случае мы должны удалить @Component аннотация от определения класса фильтра и зарегистрировать фильтр с помощью ФильтрРегистрацияБыть :

@Bean
public FilterRegistrationBean loggingFilter(){
    FilterRegistrationBean registrationBean 
      = new FilterRegistrationBean<>();
        
    registrationBean.setFilter(new RequestResponseLoggingFilter());
    registrationBean.addUrlPatterns("/users/*");
        
    return registrationBean;    
}

Теперь фильтр будет применяться только для путей, которые соответствуют /пользователи/ рисунок.

Чтобы установить шаблоны URL для фильтра, мы можем использовать addUrlPatterns () или setUrlPatterns () методика.

3. Быстрый пример

Давайте создадим простую конечную точку и отправим ей запрос HTTP:

@RestController
@RequestMapping("/users")
public class UserController {
    
    @GetMapping()
    public List getAllUsers() {
        // ...
    }
}

В журналах приложений при просмотре этого API:

23:54:38 INFO  com.spring.demo.TransactionFilter - Starting Transaction for req :/users
23:54:38 INFO  c.s.d.RequestResponseLoggingFilter - Logging Request  GET : /users
...
23:54:38 INFO  c.s.d.RequestResponseLoggingFilter - Logging Response :application/json;charset=UTF-8
23:54:38 INFO  com.spring.demo.TransactionFilter - Committing Transaction for req :/users

Это подтверждает, что фильтры вызываются в нужном порядке.

4. Заключение

В этой статье мы обобщили, как определить пользовательские фильтры в веб-приложении Spring Boot.

Как всегда, фрагменты кода можно найти более на GitHub .