如何在 Undertow/EAP 7 上提供过滤器参数?
Posted
技术标签:
【中文标题】如何在 Undertow/EAP 7 上提供过滤器参数?【英文标题】:How do I provide filter parameters on 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>
我该怎么做:
-
在 XML 配置中为该过滤器提供参数
在 Java 代码中使用这些参数
我已经搜索了一些文档,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】:好的,所以我在仔细阅读了源代码 + 一些反复试验后想出了一个解决方案。这对我有用:
根据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。
【讨论】:
以上是关于如何在 Undertow/EAP 7 上提供过滤器参数?的主要内容,如果未能解决你的问题,请参考以下文章
如果上一个和最后一个日期之间的 datediff < 7,如何显示每个用户的最新日期并过滤行
在 Drupal 7 中,如何使用“搜索视图”模块将搜索词过滤器添加到我的视图中?