gpt4 book ai didi

java - 审核/记录所有传入的 Web 请求到 @RequestMapping 带注释的方法

转载 作者:行者123 更新时间:2023-12-02 04:04:31 24 4
gpt4 key购买 nike

来源

http://docs.spring.io/spring/docs/current/spring-framework-reference/html/mvc.html#mvc-handlermapping

我有用@Controller注释的 Controller 类,它们有用@RequestMapping注释的方法。 我的任务是审核 Controller 类接收到的所有 Web 请求到 @RequestMapping 方法,我在 UI 上使用数据表来发送和接收来自 Controller 的响应。审计框架已经到位。

项目在 Java Config 中配置。

我不知道如何继续完成这项工作。

// Configure Interceptor

public class WebConfig extends WebMvcConfigurerAdapter {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new MyInterceptor());
}

public @Bean
RequestMappingHandlerMapping requestMappingHandlerMapping() {
RequestMappingHandlerMapping handlerMapping = new RequestMappingHandlerMapping();
handlerMapping.setAlwaysUseFullPath(true);
handlerMapping.setUseSuffixPatternMatch(false);
return handlerMapping;
}
}

//Add Handler
@Component
public class MyInterceptor extends HandlerInterceptorAdapter {
@Inject RequestMappingHandlerMapping requestMappingHandlerMapping;
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
throws Exception {
// do stuff - ( Does my Audit Code go here? eg: Logger.info("xyz request"))
return true;
}
}

我想这样的东西会起作用。

对此有任何建议,以及如果使用监听器或其他拦截器更容易,那会很有帮助

最佳答案

使用拦截器,您可以完全访问 HandlerMethod提供方便的访问方法参数、方法返回值、方法注解等

以下示例拦截并记录映射请求。

class WebMvcConfig extends WebMvcConfigurerAdapter {

@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new HandlerInterceptorAdapter() {
Logger logger = LoggerFactory.getLogger(WebMvcConfig.class);

@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if (handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
logger.info("{} - {} - method '{}' on controller '{}'",
request.getMethod(), request.getRequestURI(), method.getName(),
handlerMethod.getBean().getClass()
);
}
return true;
}
});
}
}

它返回 true 以继续执行链(并将请求转发给其他拦截器或 Controller 方法本身)。

示例日志输出如下所示:

GET -/greeting - Controller “class hello.GreetingController”上的方法“greeting”

关于java - 审核/记录所有传入的 Web 请求到 @RequestMapping 带注释的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34502281/

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