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请求中的参数
22. Spring Boot 拦截器HandlerInterceptor从零开始学Spring Boot