Предполагая, что вы уже настроили базу данных и создали таблицу для контрольного журнала, вы можете расширить класс 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)
. Также не забудьте отредактировать запрос, чтобы он соответствовал созданной вами таблице и столбцам. Надеюсь, это поможет!