Spring Boot - 拦截器:仅在 GET 请求中排除路径

Posted

技术标签:

【中文标题】Spring Boot - 拦截器:仅在 GET 请求中排除路径【英文标题】:Spring Boot - Interceptor: Exclude path only in GET request 【发布时间】:2021-05-06 10:01:49 【问题描述】:

我正在开发一个 Java Spring 项目,我们为安全性编写了一个拦截器。这个类实现了WebMvcConfigurer,我们重写了addInterceptors方法:

@Override
public void addInterceptors(InterceptorRegistry registry) 
        registry.addInterceptor(new SecurityInterceptor(aService, sService))
                .excludePathPatterns("/", "/ping", "/resc")
        

这很好用。 现在,路径“/resc”有一个 GET 请求,也有一个 POST 请求。关键是 POST 请求必须被拦截,而不是 GET 请求到同一路径。

有没有办法做到这一点? 谢谢

【问题讨论】:

我很确定这已经有了答案:***.com/a/26848692,您需要将 OPTIONS 替换为 GET 并将路径替换为您的路径。 【参考方案1】:

InterceptorRegistration 不提供任何用于您目的的方法。 但我认为有一种方法可以实现你的行为。您可以自动装配 ApplicationContext。而不是在您的拦截器中执行此操作:

try 
  RequestMappingHandlerMapping req2HandlerMapping = (RequestMappingHandlerMapping)applicationContext.getBean("requestMappingHandlerMapping");
  HandlerExecutionChain handlerExeChain = req2HandlerMapping.getHandler(request);
  if (Objects.nonNull(handlerExeChain)) 
     Method method = ((HandlerMethod) handlerExeChain.getHandler()).getMethod();
     if (!method.isAnnotationPresent(GetMapping.class)) 
       //Provide your Security Checks here.
     
 catch (Exception e) 
  //provide some Error Code

如果您还想检查特定路径。例如你的“/resc”你可以用一个额外的if来检查。

【讨论】:

最后,我在Interceptor中使用请求。有了这个,我得到了具体的路径和使用的方法。感谢您的帮助

以上是关于Spring Boot - 拦截器:仅在 GET 请求中排除路径的主要内容,如果未能解决你的问题,请参考以下文章

spring boot拦截器中获取request post请求中的参数

spring-boot 拦截器不拦截

spring boot 拦截器添加

22. Spring Boot 拦截器HandlerInterceptor从零开始学Spring Boot

spring拦截器HandlerInterceptorAdapter,能不能控制范围?

Spring全家桶之spring boot