2016-04-26 22 views
1

我有一個web.xml文件,它在上下文參數和init-param過濾器中設置變量。我想用應用程序啓動時從屬性文件中取得的值來替換這個變量。啓動時替換web.xml變量

我的web.xml是這樣的:

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5"> 

<display-name>APP NAME</display-name> 
<description> 
    App description 
</description> 
<context-param> 
    <param-name>my-param-name</param-name> 
    <param-value>${my-param-name}</param-value> 
</context-param> 
<filter> 
    <filter-name>Authentication Filter</filter-name> 
    <filter-class>my.app.Filter</filter-class> 
    <init-param> 
     <param-name>filter-var-name</param-name> 
     <param-value>${filter-var-value}</param-value> 
    </init-param> 
</filter> 
... 
</web-app> 

而且web.properties

my-param-name=${PARAM_VALUE_TO_BE_SETTED_BY_TOOL} 
filter-var-value=${FILTER_VALUE_TO_BE_SETTED_BY_TOOL} 

下面是部署如何工作:閱讀給定

1)部署工具屬性文件,並用PROD或Dev值(在該工具中設置的值)替換變量,並將文件推送到JBoss下的應用程序模塊;

2)在JBoss上啓動應用程序的部署。我希望在啓動時將web.xml變量替換爲屬性文件值。

在此先感謝。

+0

你能詳細說明你爲什麼要這麼做嗎?如果僅僅是「不要搞亂webapp web.xml」,你應該考慮爲這些值使用上下文參數並且在部署上進行配置(在你的上下文的單獨的context.xml中) – Jan

+0

有兩個想法:a)直接在web中替換值.xml而不是步驟1中的屬性文件或重新編碼過濾器,並使您可以訪問上下文參數來讀取屬性值。 – Jan

+0

第一個是我現在的但不好,因爲我必須有一個戰爭文件的PROD和DEV。我無法實現第二個建議,因爲我無法重新編碼所有過濾器。 –

回答

0

我們創建了一個包裝過濾器,它擴展了Servlet過濾器以將值設置爲web.xml過濾器變量。這些值取自DEV和PROD環境的外部屬性文件。

web.xml中:

... 
<filter> 
    <filter-name>CAS Authentication Filter</filter-name> 
    <filter-class>my.package.WrappedFilter</filter-class> 
    <init-param> 
     <param-name>key</param-name> 
     <param-value>wrappedCasFilter</param-value> 
    </init-param> 
    <init-param> 
     <param-name>class</param-name> 
     <param-value>org.jasig.cas.client.authentication.AuthenticationFilter</param-value> 
    </init-param> 
</filter> 
... 

屬性文件:

wrappedCasFilter.init.casServerLoginUrl = https://URL 

我很傷心,我cant't告訴你的WrappedFilter內容。