我已经为 Undertow/EAP7 编写了一个自定义过滤器,并将其放在服务器配置文件中。 我的 XML 如下所示:
<subsystem xmlns="urn:jboss:domain:undertow:3.0">
<server name="default-server">
<http-listener name="default" socket-binding="http" redirect-socket="https"/>
<host name="default-host" alias="localhost">
.
.
<filter-ref name="myFilter" />
</host>
</server>
.
.
<filters>
.
.
<filter name="myFilter" module="josh.example.myFilter" class-name="josh.example.myFilter">
</filter>
</filters>
</subsystem>
如何:
- 在 XML 配置中为此筛选器提供参数
- 在 Java 代码中使用这些参数
我已经搜索了一下文档,底层处理程序作者指南以及 JBoss EAP 7 Web 服务器配置指南对此事保持沉默。
更新:刚刚找到.xsd,参数可以像这样添加到XML中:
<filter name="myFilter" module="josh.example.myFilter" class-name="josh.example.myFilter">
<param name="foo" value="bar" />
</filter>
但是,仍然在寻找如何在 Java 处理程序端使用这些。
,所以我在仔细阅读源代码+一些反复试验后想出了一个解决方案。 以下是对我有用的方法:
根据widlfly-undertow_3_0.xsd规范(撰写本文时是当前的),您可以添加任意数量的参数,如下所示:
<filter name="MyFilter" module="josh.example.MyFilter" class-name="josh.example.MyFilter">
<param name="foo" value="bar" />
<param name="magicNumber" value="7" />
</filter>
然后,创建一些与过滤器上的参数名称匹配的类似 bean 的 setter:
public class MyFilter implements HttpHandler {
public void setFoo(String foo) {
log.info("set foo to {}", foo);
}
public void setMagicNumber(Integer magicNumber) {
log.info("set magicNumber to {}", magicNumber);
}
}
我还尝试将这些字段用作构造函数参数,如下所示:
public class MyFilter implements HttpHandler {
public MyFilter(HttpHandler next, String foo, Integer magicNumber) {
// do stuff
}
}
但是,当在 JBoss 服务器配置文件(通常类似于 inalone.xml)中配置时,ConfigurationHandlerWrapper 总是抓取HttpHandler
构造函数并忽略其余部分。 因此,此方法不适用于 EAP7。