gpt4 book ai didi

tomcat - JDBCAccessLogValue - 将 HTTP POST 内容记录到 SQL Server

转载 作者:行者123 更新时间:2023-11-28 23:23:14 25 4
gpt4 key购买 nike

我在 server.xml 中有一个配置,它正在将一些访问数据(remoteHost、userName、virtualHost、方法(post/get)、查询、referer)记录到 SQL Server 数据库(使用 JDBCAccessLogValve)中。一切正常,但我需要记录 HTTP POST 的内容,但我不知道该怎么做。

JDBCAccessLogValve 上有没有配置谁可以做这个?

我也读过一些关于过滤器的东西,但我真的不知道如何实现它们。欢迎任何帮助或建议。

最佳答案

好吧,我终于制作了一个过滤器并且它正在运行。

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;

boolean dangerRequest = false;

try {
// TODO: 0. Verify if access_log is enable to this VM

// TODO: 1. Validate content length
if (request.getContentLength() > -1) {
int i = 0;
i++;
}

Date timestamp = new Date();
String virtualHost = httpRequest.getServerName();
String method = httpRequest.getMethod();
String referer = httpRequest.getHeader("referer");
String userAgent = httpRequest.getHeader("user-agent");

StringBuilder url = new StringBuilder();
StringBuffer urlBuffer = httpRequest.getRequestURL();
if (urlBuffer != null) {
url.append(urlBuffer.toString());
}

String queryString = httpRequest.getQueryString();
if (!TextTools.isNullOrEmpty(queryString)) {
url.append("?");
url.append(queryString);
}

String remoteHost = request.getRemoteAddr();

StringBuilder headers = new StringBuilder();
Enumeration<String> allHeaders = httpRequest.getHeaderNames();
// If the servlet container does not allow servlets to use this method >> NULL
if (allHeaders != null) {
while (allHeaders.hasMoreElements()) {
if (headers.length() > 0) {
headers.append("; ");
}
headers.append(allHeaders.nextElement());
}
}

StringBuilder params = new StringBuilder();
Enumeration<String> paramasEnum = request.getParameterNames();
while (paramasEnum.hasMoreElements()) {
String name = paramasEnum.nextElement();
params.append(name);
params.append("=");
String value = request.getParameter(name);

if (value.contains("'")) {
dangerRequest = true;
}

params.append(value);
if (paramasEnum.hasMoreElements()) {
params.append("\r\n");
}
}

Integer contentLength = request.getContentLength();

Connection conn = null;

try {
conn = Server.get().getConn(true);

accessLog accessLog = new accessLog();
accessLog.setTimestamp(timestamp);
if (virtualHost.length() > 64) {
accessLog.setVirtualHost(virtualHost.substring(0, 64));
} else {
accessLog.setVirtualHost(virtualHost);
}
if (method.length() > 8) {
accessLog.setMethod(method.substring(0, 8));
} else {
accessLog.setMethod(method);
}
if (referer.length() > 128) {
accessLog.setReferer(referer.substring(0, 128));
} else {
accessLog.setReferer(referer);
}
if (userAgent.length() > 128) {
accessLog.setUserAgent(userAgent.substring(0, 128));
} else {
accessLog.setUserAgent(userAgent);
}
if (url.toString().length() > 255) {
accessLog.setUrl(url.toString().substring(0, 255));
} else {
accessLog.setUrl(url.toString());
}
if (remoteHost.length() > 15) {
accessLog.setRemoteHost(remoteHost.substring(0, 15));
} else {
accessLog.setRemoteHost(remoteHost);
}
if (headers.toString().length() > 255) {
accessLog.setHeaders(headers.toString().substring(0, 255));
} else {
accessLog.setHeaders(headers.toString());
}
if (params.toString().length() > 255) {
accessLog.setParams(params.toString().substring(0, 255));
} else {
accessLog.setParams(params.toString());
}
accessLog.setContentLength(contentLength);

accessLogDao dao = new accessLogDao(conn, null);
dao.saveRow(accessLog);
conn.commit();

} catch (Exception e) {
Server.get().getLogger().error(e);
conn.rollback();
} finally {
if (conn != null) {
conn.close();
}
}
} catch (Throwable e) {
e.printStackTrace();
}

// TODO: 2. Validate patterns
if (!dangerRequest) {
super.doFilter(request, response, chain);
}
}

关于tomcat - JDBCAccessLogValue - 将 HTTP POST 内容记录到 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40347720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com