Java 如何在底拖/EAP 7上提供过滤器参数?
我已经为Undertow/EAP7编写了一个自定义过滤器,并将其放到了服务器配置文件中。我的XML如下所示:Java 如何在底拖/EAP 7上提供过滤器参数?,java,jboss,undertow,Java,Jboss,Undertow,我已经为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"/>
<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>
<filter name="myFilter" module="josh.example.myFilter" class-name="josh.example.myFilter">
<param name="foo" value="bar" />
</filter>
<filter name="MyFilter" module="josh.example.MyFilter" class-name="josh.example.MyFilter">
<param name="foo" value="bar" />
<param name="magicNumber" value="7" />
</filter>
.
.
.
.
.
.
我如何:
<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>
<filter name="myFilter" module="josh.example.myFilter" class-name="josh.example.myFilter">
<param name="foo" value="bar" />
</filter>
<filter name="MyFilter" module="josh.example.MyFilter" class-name="josh.example.MyFilter">
<param name="foo" value="bar" />
<param name="magicNumber" value="7" />
</filter>
但是,我仍在寻找如何在Java处理程序端使用这些工具。好的,所以我在仔细阅读源代码并尝试了一些错误后,找到了一个解决方案。以下是对我有效的方法: 根据规范(编写时的当前规范),可以添加任意数量的参数,如下所示:
<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>
<filter name="myFilter" module="josh.example.myFilter" class-name="josh.example.myFilter">
<param name="foo" value="bar" />
</filter>
<filter name="MyFilter" module="josh.example.MyFilter" class-name="josh.example.MyFilter">
<param name="foo" value="bar" />
<param name="magicNumber" value="7" />
</filter>
我还尝试将字段用作构造函数参数,如下所示:
public class MyFilter implements HttpHandler {
public MyFilter(HttpHandler next, String foo, Integer magicNumber) {
// do stuff
}
}
但是,当在JBoss服务器配置文件(通常类似于standalone.xml)中配置时,总是获取HttpHandler
构造函数并忽略其余的构造函数。因此,这种方法不适用于EAP7