我写了一个过滤器,我认为它在许多web应用程序中通常很有用。我想把它放在一个库中(打包成一个jar文件),这样它就可以分发和使用。然而,我不想强迫图书馆的用户使用它(它只是其中许多美妙的东西之一)。
目前,过滤器看起来是这样的:
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>
在勇敢的新EE6世界里,这似乎很笨拙。
如果我这样定义过滤器:
@WebFilter("/*")
public class WonderfulFilter implements Filter {
然后不需要配置即可应用过滤器。但也没有不应用过滤器的选项。
我能做什么?有没有任何方法可以在不隐式应用的情况下对过滤器进行注释以定义其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模式。但至少他们不必编写过滤器定义。因此,它们与过滤器类的特定名称绝缘,并免除了提供任何强制性init params的责任。
这并没有多大改善。