我为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>
我如何:
我对文档进行了一些搜索,undertow handler author's guide对这个问题以及JBoss EAP 7 web server config guide都保持沉默。
更新 刚刚找到the .xsd,参数可以像这样添加到XML:
<filter name="myFilter" module="josh.example.myFilter" class-name="josh.example.myFilter">
<param name="foo" value="bar" />
</filter>
但是,仍然希望看看如何在Java处理程序端使用它们。
答案 0 :(得分:2)
好的,所以我在仔细阅读了源代码+一些反复试验之后想出了一个解决方案。这对我有用:
根据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服务器配置文件中配置时(通常类似于 standalone.xml ),ConfiguredHandlerWrapper总是抓取HttpHandler
构造函数并忽略其余部分。因此,这种方法不适用于EAP7。