1. Вы можете реализовать класс Filter , расширяющийся от OncePerRequestFilter , и тогда каждый запрос будет проходить через ваш фильтр.Затем вы можете войти, что вы хотите внутри этого класса.
@Slf4j
@Component
public class RequestLoggingFilter extends OncePerRequestFilter {
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {
log.debug(
String.format("FILTERED URL: %s", request.getRequestURI())
);
//continue filtering
filterChain.doFilter(request, response);
}
}
2. Другой способ - реализовать класс Interceptor, расширяющийся с HandlerInterceptorAdapter .
@Slf4j
@Component
public class RequestLoggingHandler extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
log.debug(
String.format("HANDLER(pre) URL: %s", request.getRequestURI())
);
return super.preHandle(request, response, handler);
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
log.debug(
String.format("HANDLER(post) URL: %s", request.getRequestURI())
);
super.postHandle(request, response, handler, modelAndView);
}
}
Но вы должны включить этот перехватчик, явно добавив его через конфигурацию.
@Configuration
public class WebApplicationConfiguration implements WebMvcConfigurer {
@Setter(onMethod_ = @Autowired)
private RequestLoggingHandler requestLogger;
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(requestLogger);
}
}
3. Еще один способ - использовать стандарт CommonsRequestLoggingFilter .
Таким образом, вы должны настроить его следующим образом:
@Configuration
public class RequestLoggingFilterConfig {
@Bean
public CommonsRequestLoggingFilter logFilter() {
CommonsRequestLoggingFilter filter
= new CommonsRequestLoggingFilter();
filter.setIncludeQueryString(true);
filter.setIncludePayload(true);
filter.setMaxPayloadLength(10000);
filter.setIncludeHeaders(false);
filter.setAfterMessagePrefix("REQUEST DATA : ");
return filter;
}
}
, а затем включить его в logback.xml:
<logger name="org.springframework.web.filter.CommonsRequestLoggingFilter">
<level value="DEBUG" />
</logger>