小编vBe*_*ean的帖子

有没有办法从 ApplicationFilterChain 获取所有 servlet 过滤器?

我有多个使用机制的定制 Java 库javax.servlet.Filter,我想确保集成这些库的开发人员不会使用 @Order(Ordered.HIGHEST_PRECEDENCE). 另外,如果你知道一种从他们的过滤器中
收集所有内容的方法,那就太棒了。 ApplicationFilterConfigApplicationFilterChainOrder

我认为当Spring初始化上下文时检查是否有多个具有最高优先级的过滤器,或者可能在注册过滤器时(如果有任何我可以实现或挂钩的SpringFilterResister)。

谢谢!

稍后编辑:由于我没有找到获取a 的
方法,所以我只是验证其他客户端是否尝试使用 注册a 。在展示代码之前,有两种方法将 Filter 注册到 Filter 链中: 1. 实现并注释 with (默认情况下具有最低优先级) 2.在类下使用 a。 话虽这么说,我只是检查是否有人使用这两种注册过滤器的方法: OrderFilterBeanOrdered.HIGHEST_PRECEDENCE
javax.servlet.Filter@Component
FilterRegistrationBean.class@Configuration

@ManagedBean
public class MyServletContextInitializer implements ServletContextInitializer {

    @Autowired
    private ApplicationContext context;

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        Map<String, ? extends FilterRegistration> filters = servletContext.getFilterRegistrations();

        //check for @Order(Ordered.HIGHEST_PRECEDENCE) annotations
        List<String> result = filters.keySet().stream()
                .filter(beanName -> context.getBean(beanName)
                        .getClass().getAnnotation(Order.class).value() == Ordered.HIGHEST_PRECEDENCE)
                .collect(Collectors.toList()); …
Run Code Online (Sandbox Code Playgroud)

java servlet-filters spring-boot

5
推荐指数
0
解决办法
2170
查看次数

标签 统计

java ×1

servlet-filters ×1

spring-boot ×1