WebGoat SpringBoot应用控制台未记录HTTP状态码问题排查
解决WebGoat记录HTTP状态码的问题
一、配置排查(无需修改代码)
1. 启用Tomcat访问日志并输出到控制台
WebGoat基于Spring Boot,默认使用Tomcat作为嵌入式容器。要记录请求状态码,需启用Tomcat的访问日志并定向到控制台:
在application.properties中添加以下配置:
# 启用Tomcat访问日志 server.tomcat.accesslog.enabled=true # 日志格式,%s代表HTTP状态码,其余参数可按需调整 server.tomcat.accesslog.pattern=%h %l %u %t "%r" %s %b %D # 将访问日志输出到控制台(默认写入文件) server.tomcat.accesslog.directory=/dev/stdout server.tomcat.accesslog.prefix= server.tomcat.accesslog.suffix= server.tomcat.accesslog.file-date-format=
配置完成后,Tomcat会直接将包含状态码的访问日志输出到控制台。
2. 检查日志级别配置
确保你配置的日志级别覆盖了正确的包路径,可补充以下配置强化Web相关日志输出:
logging.level.org.springframework.web=DEBUG logging.level.org.apache.catalina.core=DEBUG
注意:单纯开启DEBUG级别不会自动输出状态码,上述Tomcat访问日志配置才是核心。
二、手动添加日志代码(自定义场景)
若配置方式无法满足需求,可通过自定义拦截器实现状态码记录:
1. 创建自定义拦截器类
在WebGoat源码中新建类(示例路径:src/main/java/org/webgoat/security/RequestLoggingInterceptor.java):
package org.webgoat.security; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.web.servlet.HandlerInterceptor; public class RequestLoggingInterceptor implements HandlerInterceptor { private static final Logger log = LoggerFactory.getLogger(RequestLoggingInterceptor.class); @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { String requestUri = request.getRequestURI(); int statusCode = response.getStatus(); log.debug("请求路径: {}, HTTP状态码: {}", requestUri, statusCode); } }
2. 注册拦截器
找到WebGoat中的Spring配置类(或新建WebMvcConfig类),注册拦截器:
package org.webgoat.config; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import org.webgoat.security.RequestLoggingInterceptor; @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new RequestLoggingInterceptor()) .addPathPatterns("/**"); // 拦截所有请求 } }
3. 配置拦截器日志级别
在application.properties中添加:
logging.level.org.webgoat.security.RequestLoggingInterceptor=DEBUG
启动WebGoat后,访问页面时控制台会输出包含状态码的DEBUG日志。
三、验证效果
启动WebGoat后访问任意页面,控制台会出现对应日志:
- Tomcat访问日志格式示例:
127.0.0.1 - - [10/Oct/2024:15:30:00 +0800] "GET / HTTP/1.1" 200 12345 10 - 自定义拦截器日志示例:
DEBUG o.w.s.RequestLoggingInterceptor - 请求路径: /, HTTP状态码: 200
内容的提问来源于stack exchange,提问作者unacorn
相关产品推荐
相关产品推荐

