URLRewritefilterを使用してレガシサーバからページを移動する方法
-
21-12-2019 - |
質問
従来のコードを新しい実装に移動する過程にあります。レガシコードは、「レガシー」の「L」プレフィックスを持つサーバーによってホストされています。各ページが新しいサーバーに移動されると、URLRewRitefilterがURLを変更したいです。だから私はこのようなことをする必要があります:
から: http://lapp.company.com/page1.aspx to: http://app.company.com/pageone
サーバー名がそれぞれの場合でもわずかに変わるいくつかの異なる環境(Dev、Stage、Production)で動作する必要があるため、状況はさらに複雑です。例えば:
ローカル: http://applocal.companydev.com:8080 dev: http://app.companydev.com ステージ: http://app.companystage.com prod: http://app.company.com
これは規則の例です:
<rule>
<from>^/offers/buyKit.aspx$</from>
<to type="redirect">%{context-path}/offers/buyKit</to>
</rule>
.
> http://lapp.company.com/offers/buykit.aspx やってくる、私はそれが http://app.company.com/offers/buykit
解決
これは私が思いついた解決策です。 書き換えフィルタを使用すると、ルールが一致したときに呼び出されるメソッドを指定できます。このコールバックメソッドを使用して、現在の環境に基づいてサーバーコンテキストを検索します。この環境固有のコンテキストは、要求の属性として設定されます。これは、ルールの「to」要素で使用できます。
XMLファイルからの更新規則:
<rule>
<from>^/offers/buyKit.aspx$</from>
<run class="com.company.app.UrlHelper" method="setMyContext"/>
<to type="redirect" last="true">%{attribute:myContext}/offers/buyKit</to>
</rule>
.
とここにコンテキスト設定方法があります:
public class UrlHelper {
private static final String APP_BASE_URL = "app.company.base.url";
private Properties appConfig;
public void setMyContext(HttpServletRequest request, HttpServletResponse response) throws IOException {
if (appConfig == null) {
appConfig = (Properties) StaticSpringApplicationContext.getBean("appConfig");
Assert.notNull(appConfig, "Unable to get appConfig.");
}
String appBase = appConfig.getProperty(APP_BASE_URL);
Assert.hasText(appBase, "Could not find property: " + APP_BASE_URL);
request.setAttribute("myContext", appBase);
}
}
.
それはかなりうまく機能します。