jakarta-ee - JavaEE6 启用/禁用 webfilter 无需重新编译

标签 jakarta-ee annotations java-ee-6 servlet-filters

我正在将应用程序迁移到新的 JavaEE6 标准。并且在创建新过滤器时使用注释非常容易。我只需要向我的 POJO 类添加 @WebFilter 注释即可,效果很好。

令我困惑的是:所有带有注释的过滤器都会由容器自动加载。有时这是不希望的。我可能会创建一组过滤器,不同的网络应用程序会选择仅使用这些过滤器的子集。所以我的问题是:是否有一种简单的方法可以根据不同的部署启用/禁用过滤器,同时仍然允许我对每个过滤器类使用简单的 WebFilter 注释?

我在上面搜索的时候发现了这篇文章: Dynamically registering WebFilter with Java EE 6

但是本文似乎建议不要在每个过滤器类上使用注释,并通过直接引用每个过滤器类的 ServletContextListener 加载它们。这似乎不是一个最佳解决方案。

谢谢,

最佳答案

这是不可能的。

最好的办法是通过检查某些 web.xml 上下文参数、VM 参数或指示不应使用过滤器的环境变量来扩展过滤器。

例如

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    if ("true".equals(System.getProperty("com.example.DISABLE_FILTER"))) {
        chain.doFilter(request, response);
        return;
    }

    // Original filter code here.
}

可以通过提供VM参数-Dcom.example.DISABLE_FILTER=true来禁用它。

关于jakarta-ee - JavaEE6 启用/禁用 webfilter 无需重新编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10743442/

相关文章:

java - 如何将 Eclipse 动态 Web 项目上传到实时服务器?

java - 如何将可下载文件放入 HttpServletResponse?

java - 理解 <jsp :attribute> semantics

java - 将 HTTP Request.login 与 JBoss/JAAS 一起使用

Glassfish:无法使用 glassfish-web.xml 将数据源 JNDI 名称映射到可移植名称

java - Rest 服务的 Application 类生命周期是什么?

java - JMockit 在 @PostConstruct 中模拟私有(private)方法

java - 如何通过注释获取类的字段

java - 注解处理器,获取方法参数的修饰符

java - 测试枚举的常规 DynamoDBMarshalling