【问题标题】:How do I provide filter parameters on Undertow/EAP 7?如何在 Undertow/EAP 7 上提供过滤器参数?
【发布时间】:2016-06-04 03:39:40
【问题描述】:

我为 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 代码中使用这些参数

我已经搜索了一些文档,undertow handler author's guideJBoss 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 处理程序端使用这些。

【问题讨论】:

    标签: java jboss undertow


    【解决方案1】:

    好的,所以我在仔细阅读了源代码 + 一些反复试验后想出了一个解决方案。这对我有用:

    根据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 设置器:

    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。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-09-23
      • 2020-11-04
      • 2020-04-08
      • 1970-01-01
      • 2016-11-09
      • 2016-12-08
      • 2017-04-10
      • 1970-01-01
      相关资源
      最近更新 更多