如何在Undertow / EAP 7上提供过滤器参数?

时间:2016-02-22 16:03:58

标签: 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"/>
        <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>

我如何:

  1. 在XML配置中为此过滤器提供参数
  2. 在Java代码中使用这些参数
  3. 我对文档进行了一些搜索,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处理程序端使用它们。

1 个答案:

答案 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。