首页 文章

java中的URL路径匹配器(Spring)

提问于
浏览
0

在我们的应用程序中,我们正在创建请求过滤器,不应该为某些网址命中 . 我们希望能够排除像 Spring 天做女巫网址模式的网址,例如:

// register filter in bean
FilterRegistrationBean filterBeanRegistration = new FilterRegistrationBean();
filterBeanRegistration.setFilter(myFilter());
filterBeanRegistration.addInitParameter("excluded", "*/foo/**, */bar/**");
...

和新的过滤器不会像 domain:8080/aaa/foo/xxxxdomain:8080/bbb/bar/xxxx 那样点击网址 .

你能用 Spring 季课程或其他简单的方式告诉我如何做到这一点吗?谢谢你的建议 .

编辑:有 FilterBeanRegistration#addUrlPatterns(String... urls) 方法,我可以指定网址,但没有任何格式告诉哪个网址应该命中 . 为了我们的目的,最好排除一些网址 .

1 回答

  • 2

    你可以使用 org.springframework.web.filter.OncePerRequestFilter . 每次传入请求都会执行一次 . 您可以覆盖 shouldNotFilter 方法以排除您不希望运行过滤器的URL . 示例代码:

    public class MyFilter extends OncePerRequestFilter {
    
      private static final String[] excludedEndpoints = new String[] {"*/foo/**, */bar/**"};
    
      @Override
      protected boolean shouldNotFilter(HttpServletRequest request) throws ServletException {
        return Arrays.stream(excludedEndpoints)
            .anyMatch(e -> new AntPathMatcher().match(e, request.getServletPath()));
      }
    
      @Override
      protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
          FilterChain filterChain) throws ServletException, IOException {
        // Filtering logic goes here. call below line on successful authentication.
        filterChain.doFilter(request, response);
      }
    }
    

相关问题