Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.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 如何在底拖/EAP 7上提供过滤器参数?_Java_Jboss_Undertow - Fatal编程技术网

Java 如何在底拖/EAP 7上提供过滤器参数?

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"/>

我已经为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>
<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>

.
.
.
.
.
.
我如何:

  • 在XML配置中为此筛选器提供参数
  • 在Java代码中使用这些参数
  • 我搜索了一下文档,但该公司对这件事保持沉默

    更新: 刚刚发现,可以将参数添加到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>
    
    <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