在过滤器中实现请求参数和响应结果日志的打印
时间: 2024-02-16 16:04:27 浏览: 29
可以通过在过滤器中获取请求参数和响应结果并打印日志的方式来实现。
在过滤器中,可以通过HttpServletRequest对象获取请求参数,例如:
```java
String queryString = request.getQueryString(); // 获取请求参数
```
而获取响应结果则需要在HttpServletResponse对象的输出流中进行捕获,例如:
```java
// 获取响应输出流
PrintWriter writer = response.getWriter();
// 创建一个新的输出流
PrintWriter newWriter = new PrintWriter(new OutputStreamWriter(writer, "UTF-8"), true);
// 将新输出流设置给HttpServletResponse对象
response.setCharacterEncoding("UTF-8");
response.setContentType("application/json;charset=UTF-8");
response.getWriter().write(result); // result为响应结果
// 捕获输出流中的内容
String responseResult = new String(writer.toString().getBytes("UTF-8"));
```
在获取到请求参数和响应结果后,可以通过日志框架(如log4j、slf4j等)将其打印出来,例如:
```java
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class RequestLoggingFilter implements Filter {
private static final Logger logger = LoggerFactory.getLogger(RequestLoggingFilter.class);
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
String queryString = httpRequest.getQueryString(); // 获取请求参数
logger.info("Request URL: {}?{}", httpRequest.getRequestURL(), queryString);
HttpServletResponse httpResponse = (HttpServletResponse) response;
// 获取响应输出流
PrintWriter writer = httpResponse.getWriter();
// 创建一个新的输出流
PrintWriter newWriter = new PrintWriter(new OutputStreamWriter(writer, "UTF-8"), true);
// 将新输出流设置给HttpServletResponse对象
httpResponse.setCharacterEncoding("UTF-8");
httpResponse.setContentType("application/json;charset=UTF-8");
// 捕获输出流中的内容
String responseResult = new String(writer.toString().getBytes("UTF-8"));
logger.info("Response: {}", responseResult);
// 继续执行过滤器链
chain.doFilter(request, response);
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void destroy() {
}
}
```
以上就是在过滤器中实现请求参数和响应结果日志打印的方法。