我们希望在Sping Boot 应用程序启动后创建一个包含所有请求方法,路径,头部和主体的文件。我的意思是甚至在任何端点被击中之前。这能实现吗?下面的代码似乎不起作用。
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.mvc.method.RequestMappingInfo;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping;
import java.util.Map;
import java.util.Set;
@Component
public class EndpointScanner {
private RequestMappingHandlerMapping handlerMapping;
@Autowired
public EndpointScanner(RequestMappingHandlerMapping handlerMapping) {
this.handlerMapping = handlerMapping;
}
public void scanEndpointsWithRequestBody() {
Map<RequestMappingInfo, HandlerMethod> handlerMethods = handlerMapping.getHandlerMethods();
for (RequestMappingInfo requestMappingInfo : handlerMethods.keySet()) {
HandlerMethod handlerMethod = handlerMethods.get(requestMappingInfo);
Set<String> methods = requestMappingInfo.getMethodsCondition().getMethods();
// Check if the endpoint accepts a request body
if (methods.size() > 0 && handlerMethod.getMethod().getParameterCount() > 0) {
RequestMapping requestMapping = handlerMethod.getMethodAnnotation(RequestMapping.class);
String[] paths = requestMapping.value();
// You can also access other details like HTTP methods, headers, etc.
for (String path : paths) {
System.out.println("Endpoint: " + path);
}
}
}
}
}
1条答案
按热度按时间smdncfj31#
要在Sping Boot 应用程序启动后检索所有请求方法,请求路径,请求头和请求体,您可以使用Servlet API提供的
Filter
接口的实现。下面是一个如何实现此目标的示例:1.创建一个实现
Filter
接口的新类。这个类将拦截传入的HTTP请求并提取所需的信息。例如:1.在Sping Boot 应用程序中注册
RequestLoggingFilter
。有几种方法可以做到这一点:a.如果您使用Sping Boot 的默认嵌入式servlet容器(例如Tomcat),则可以将filter注册为
@Configuration
类中的bean:B.如果你使用Sping Boot 和Spring MVC,你可以通过扩展
WebMvcConfigurerAdapter
类来注册过滤器:1.启动Sping Boot 应用程序,
RequestLoggingFilter
将拦截所有传入的请求并记录请求的信息。注意:确保将代码中的
"headerName"
替换为要检索的头的实际名称。此外,请记住,记录请求正文可能会涉及安全问题,因此请谨慎使用,并确保不会无意中记录敏感信息。