Как сохранить все API в приложении Spring Boot в базе данных? - PullRequest
0 голосов
/ 26 февраля 2019

Я должен сохранить все запросы API вместе с ответом на базу данных в приложении Spring Boot.

Я должен сохранить следующее:

request URL
request parameters
request body
response body

Как я могу сделать это в общем, чтобы я неНе нужно писать код в каждом методе?Подскажите пожалуйста как это сделать

1 Ответ

0 голосов
/ 26 февраля 2019

Кажется, есть много примеров того, как регистрировать тех, кто использует фильтры, так что вы можете вставить репозиторий в один и сохранить его вместо регистрации.

Редактировать - извините, не удалось включить chain.doFilter(request, response);

  //Filter
    @Component
    public class RequestResponseLoggingFilter implements Filter {

        private final Logger LOGGER = LoggerFactory.getLogger(Application.class);

        //Inject repo here

        @Override
        public void doFilter(
          ServletRequest request, 
          ServletResponse response, 
          FilterChain chain) throws IOException, ServletException {

            HttpServletRequest req = (HttpServletRequest) request;
            HttpServletResponse res = (HttpServletResponse) response;

            //Read data from req and res, save to repo
            LOGGER.info("Logged : " + req.getRequestURI());

            chain.doFilter(request, response);
        }

        @Override
        public void init(FilterConfig filterConfig) throws ServletException {}

        @Override
        public void destroy() {}
    }
    @Bean
    public FilterRegistrationBean<RequestResponseLoggingFilter> loggingFilter(){
        FilterRegistrationBean<RequestResponseLoggingFilter> registrationBean 
          = new FilterRegistrationBean<>();

        registrationBean.setFilter(new RequestResponseLoggingFilter());
        registrationBean.addUrlPatterns("/**");

        return registrationBean;    
    }

Невозможно автоматически подключить службу внутри моего фильтра аутентификации в Spring - это то, что вам, вероятно, понадобится.

...