Spring Boot/MVC注解过滤器

4
我正在将一个 Web 应用程序转换为使用 Spring Boot。 该应用程序目前使用 resteasy,我想将其转换为使用 Spring Rest / MVC。
到目前为止,这一过程非常简单(主要是替换注释)。 我遇到问题的唯一地方与 Filter(HTTP Filter)有关。
当前,该应用程序具有用于几个端点的 Filter。 使用注释来指定筛选器适用于哪些 rest 端点。该注释基于 @NameBinding。
在 Spring 中是否可以实现此操作(即创建一个注释,并对每个希望应用过滤器的 Rest 端点方法进行注释)?
2个回答

2
您可以定义一个扩展了OncePerRequestFilter的Filter类,并重写shouldNotFilter()方法。您需要使用@Autowire注解将RequestMappingHandlerMapping注入进来,以获取与传入请求相关联的处理程序。
然后,您可以简单地检查该处理程序方法是否包含注释。
@Autowired
private RequestMappingHandlerMapping reqMap;

@Override
protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
    HandlerMethod method = (HandlerMethod) reqMap.getHandler(request).getHandler();
    return !method.getMethod().isAnnotationPresent(SomeAnnotation.class);
}

@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) {
     // filtering logic
}

0

1
是的,但是在方法上使用注释似乎更加简洁。难道没有使用注释的方法吗? - Hani Naguib
根据这篇文章..https://dev59.com/F2Ij5IYBdhLWcg3w2ohr - Paul John
谢谢Paul,但是链接中提到的注释(@Filter)是用于指定过滤器的。我要找的是一种注释,我可以将其放在REST方法上,以指定我希望应用于被注释的特定REST终点的给定过滤器。我想我可以创建一个智能的FilterRegistrationBean,检查注释并相应地分配过滤器,只是希望它已经存在。 - Hani Naguib
我进行了一点研究,但是我没有找到能直接解决这个问题的方法。 - Paul John

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接