Как определить фильтр весенней загрузки?
1. Обзор
В этом быстром учебнике мы изумим, как определить пользовательские фильтры и указать порядок их вызова с помощью Spring Boot.
Дальнейшее чтение:
Найти зарегистрированные фильтры безопасности весны
Настройка веб-приложения Spring Boot
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 FilterRegistrationBeanloggingFilter(){ 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 .