繁体   English   中英

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

[英]Spring Boot - Interceptor: Exclude path only in GET request

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

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

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

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

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来检查它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM