创建一个servlet-filter websphere自由配置文件?

时间:2016-02-13 11:32:38

标签: servlet-filters websphere-liberty

我正在使用websphere liberty profile webserver,我已部署了几个应用程序。 这些应用程序正在发送请求消息,我想在不更改应用程序的情况下创建servlet-filter 所以我可以看到应用程序发送和接收的内容。我还想添加新的请求标题。

2 个答案:

答案 0 :(得分:4)

您可以使用ServletContainerInitializer注册新的ServletFilters。添加响应头的示例实现可能如下所示:

public class SCI implements ServletContainerInitializer {
  @Override
  public void onStartup(Set<Class<?>> arg0, ServletContext arg1)
    throws ServletException {
    arg1.addFilter("myFilter", MyFilter.class).addMappingForUrlPatterns(null, false, "/*");
  }
}

MyFilter类看起来像这样:

public static class MyFilter implements Filter {

  @Override
  public void destroy() { }

  @Override
  public void doFilter(ServletRequest arg0, ServletResponse arg1,
      FilterChain arg2) throws IOException, ServletException {
    if (arg1 instanceof HttpServletResponse) {
      ((HttpServletResponse) arg1).addHeader("Test", "Test");
    }
    arg2.doFilter(arg0, arg1);
  }

  @Override
  public void init(FilterConfig arg0) throws ServletException { }
}

然后,您需要使用名为META-INF / services / ServletContainerInitializer的文件注册它,该文件应包含Servlet容器初始化程序的完全限定类名,例如:

test.SCI

通常,您将这些打包在应用程序的jar中,但由于您不想更新应用程序,所以您可以像这样配置服务器:

<featureManager>
   <feature>bells-1.0</feature>
</featureManager>

<library id="init">
  <file name="path/to/jar"/>
</library>

<bell libraryRef="init"/>

将为所有已启动的Web应用程序调用ServletContainerInitializer,允许您添加过滤器。请注意,将为所有已启动的Web应用程序调用此应用程序,包括集成到Liberty运行时的应用程序,例如管理中心和REST连接器。

答案 1 :(得分:0)

当我尝试安装相同的bells实用程序时,得到了以下响应

CWWKF1295E:不能将bells-1.0资产下载或安装到IBM WebSphere Application Server Liberty(ILAN)19.0.0.4,因为它仅适用于以下产品版本:

  • IBM WebSphere Application Server Liberty 8.5.5.7
  • 针对开发人员的IBM WebSphere Application Server Liberty 8.5.5.7
  • IBM WebSphere Application Server Liberty-Express 8.5.5.7
  • IBM WebSphere Application Server Liberty Liberty Core 8.5.5.7
  • IBM WebSphere Application Server Liberty网络部署8.5.5.7
  • IBM WebSphere Application Server Liberty z / OS 8.5.5.7

使用installUtility查找操作来检索适用于您的安装的资产列表。