Простая запись Http-запросов в БД - PullRequest
1 голос
/ 04 марта 2020

Есть ли способ протоколировать http запросы к базе данных без использования пружинного привода? Моя программа - это весеннее приложение, которое использует JDBCtemplate для записи в базу данных. Я продолжаю видеть решения, которые пишут в журнал консоли, но мне нужно что-то, что я могу сохранить в постоянной базе данных, чтобы действовать в качестве своего рода контрольного журнала.

1 Ответ

1 голос
/ 04 марта 2020

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

@Configuration
public class LoggableDispatcherServlet extends DispatcherServlet {

    @Autowired
    JdbcTemplate jdbcTemplate;

    @Override
    protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
        try {
            super.doDispatch(request, response);
        } finally {
            log(request, response);
        }
    }

    private void log(HttpServletRequest request, HttpServletResponse response) {
        String timeStamp = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss").format(new Date());

        AuditUser auditUser = new AuditUser();
        auditUser.setUsername(request.getUserPrincipal().getName());
        auditUser.setTimestamp(timeStamp);
        auditUser.setResponseCode(response.getStatus());
        auditUser.setRequestUrl(request.getRequestURI());
        auditUser.setRequestMethod(request.getMethod());

        jdbcTemplate.update("INSERT INTO AuditUsers (username, requestTimestamp, responseCode, requestUrl, requestMethod) VALUES " +
                " (?, ?, ?, ?, ?)", auditUser.getUsername(), auditUser.getTimestamp(), auditUser.getResponseCode(),
                auditUser.getRequestUrl(), auditUser.getRequestMethod());
    }
}

Вы можете заменить объявление AuditUser своим классом сущности для хранения необходимой вам информации. Для меня я хотел сохранить принципал (так как мое приложение использует Spring Security), время запроса, код ответа, URL-адрес запроса и метод запроса. Конечно, вы можете выбрать, что вы хотите включить / исключить, отредактировав метод log (HttpServletRequest request, HttpServletResponse response). Также не забудьте отредактировать запрос, чтобы он соответствовал созданной вами таблице и столбцам. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...