Spring mvc Spring Boot/MVC按注释筛选

Spring mvc Spring Boot/MVC按注释筛选,spring-mvc,spring-boot,Spring Mvc,Spring Boot,我正在将web应用程序转换为使用spring boot。 该应用程序当前使用resteasy,我想将其转换为使用SpringREST/mvc 到目前为止,它是非常直接的(主要是替换注释)。 我遇到的一个问题与过滤器(HTTP过滤器)有关 目前,应用程序有一个过滤器,在一些端点中使用。 注释用于指定过滤器应用于哪些静止点。注释基于@NameBinding 这可以通过Spring实现吗(即创建一个注释,并为我希望应用过滤器的每个rest端点方法添加注释)?如果您使用Spring boot,您可以使用

我正在将web应用程序转换为使用spring boot。 该应用程序当前使用resteasy,我想将其转换为使用SpringREST/mvc

到目前为止,它是非常直接的(主要是替换注释)。 我遇到的一个问题与过滤器(HTTP过滤器)有关

目前,应用程序有一个过滤器,在一些端点中使用。 注释用于指定过滤器应用于哪些静止点。注释基于@NameBinding


这可以通过Spring实现吗(即创建一个注释,并为我希望应用过滤器的每个rest端点方法添加注释)?

如果您使用Spring boot,您可以使用FilterRegistrationBean并将其映射到特定的URL


您可以定义一个过滤器类,该类扩展OncePerRequestFilter并重写
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
}

是的,但是在方法上使用注释似乎要干净得多。没有办法使用注释吗?正如本文所述..谢谢Paul,但是链接(@Filter)中提到的注释用于指定过滤器。我要寻找的是一个注释,我将在rest方法上添加注释,以指定我希望将给定的过滤器应用于被注释的特定rest端点。我想我可以创建一个智能FilterRegistrationBean,它可以检查注释并相应地分配过滤器,只是希望它已经存在。我做了一点研究……我没有找到任何可以立即做到这一点的东西。