2016-02-13 55 views
0

我正在使用一個websphere liberty profile webserver,我已經部署了幾個應用程序。 這些應用程序正在發送請求消息,我想創建一個servlet過濾器而不更改應用程序 因此我可以看到應用程序正在發送和接收的內容。另外我想添加新的請求標題。創建一個servlet-filter websphere liberty配置文件?

回答

3

您可以使用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註冊/服務/ ServletContainerInitializer應包含的Servlet容器初始化的完全限定類名稱,例如:

test.SCI 

通常你在一個罐子裏我這些打包n中的應用程序,但因爲你不想更新應用程序,而不是你配置的服務器是這樣的:

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

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

<bell libraryRef="init"/> 

的ServletContainerInitializer將被用於所有啓動Web應用程序允許您添加過濾器。請注意,這將針對所有已啓動的Web應用程序(包括集成到Liberty運行時的應用程序)調用,例如管理中心和REST連接器。

+0

這是我正在尋找,但對於一些reasen這是行不通的。 我是對的,我可以將類包裝在一個罐子裏? –

+0

是的,您需要將類和META-INF打包到同一個jar文件中。上面的代碼在我們2月份的測試版上進行了測試,它確實有效。如果沒有日誌,很難知道爲什麼它不能正常工作,但要確保安裝了鈴聲-1.0功能。 – Alasdair

+0

非常感謝。它現在正在工作,我的問題是maven沒有正確地打包META-INF目錄。 –

相關問題