Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EE6过滤器是否可以用注释定义,但应用于web.xml?_Java_Java Ee 6_Servlet Filters_Web.xml - Fatal编程技术网

Java EE6过滤器是否可以用注释定义,但应用于web.xml?

Java EE6过滤器是否可以用注释定义,但应用于web.xml?,java,java-ee-6,servlet-filters,web.xml,Java,Java Ee 6,Servlet Filters,Web.xml,我已经编写了一个过滤器,我认为它在许多web应用程序中都非常有用。我想把它放在一个库中(打包成一个jar文件),这样它就可以被分发和使用。然而,我不想强迫图书馆的用户使用它(这只是其中许多奇妙的东西之一) 此时,过滤器如下所示: public class WonderfulFilter implements Filter { @WebFilter("/*") public class WonderfulFilter implements Filter { 这意味着要应用它,用户必须将以下内容

我已经编写了一个过滤器,我认为它在许多web应用程序中都非常有用。我想把它放在一个库中(打包成一个jar文件),这样它就可以被分发和使用。然而,我不想强迫图书馆的用户使用它(这只是其中许多奇妙的东西之一)

此时,过滤器如下所示:

public class WonderfulFilter implements Filter {
@WebFilter("/*")
public class WonderfulFilter implements Filter {
这意味着要应用它,用户必须将以下内容添加到web.xml中:

<filter>
    <filter-name>WonderfulFilter</filter-name>
    <filter-class>org.example.WonderfulFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>WonderfulFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
然后无需配置即可应用过滤器。但也没有不应用过滤器的选项

我能做什么?是否有任何方法可以在不隐式应用的情况下对过滤器进行注释以定义其URL模式(和其他属性)?有没有办法轻松地禁用web.xml中的过滤器


(可能有一种解决方案涉及web-fragment.xml;我们将对此进行研究…

您可以随注释一起发布web筛选器,但通过可外部化的属性激活/停用其行为。根据您的描述,您似乎希望web筛选器在默认情况下处于非活动状态,这是有道理的。只需添加文档,让第三方知道需要启用哪个属性才能打开过滤器。

应用过滤器的@WebFilter注释部分是urlPatterns属性。如果不考虑这一点,过滤器将不会应用于任何请求

因此,可以声明该类:

@WebFilter(filterName = "WonderfulFilter")
public class WonderfulFilter implements Filter {
然后,在应用程序的web.xml中,用户可以编写:

<filter-mapping>
    <filter-name>WonderfulFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

奇妙的实现者
/*
是的,他们仍然必须提供映射,包括URL模式,themself。但至少他们不必编写过滤器定义。因此,它们与筛选器类的特定名称隔离,并且免除了提供任何强制init参数的责任


这并不是一个很大的改进。

现在您想将其应用于在给定服务器上运行的所有应用程序吗?或者只适用于使用包含过滤器的jar的用户?我个人不会在这里使用注释。它不能由用户配置(如果我只想将过滤器应用于特定的模式怎么办?),更糟糕的是,仅仅包括库就突然隐式地过滤所有请求——针对一个不需要的可选功能。现在,您可以根据某些属性文件更改注释的行为,以获得所需的行为,但是,首先使用
web.xml
有什么区别呢?@havexz:我想将其应用于所有使用jar并显式启用jar的应用程序。@Voo:注释中的设置都可以被web.xml覆盖,因此它们可能应该被视为默认值而不是最终值。我认为对于许多应用程序,
/*
将是该过滤器的合理路径(它会进行一些非常通用的身份验证处理),但当然,最后的决定必须由用户来决定。如果您将此作为库传递,您是否想过两个过滤器是否具有相同的名称“WonderFulfilliter”?@havexz:实际上,我使用了类似org.example.WonderFulfilliter的格式作为名称,即反向域名格式,这样可以避免冲突。