URLRewritefilterを使用してレガシサーバからページを移動する方法

StackOverflow https://stackoverflow.com//questions/23034294

  •  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

URLRewRitefilterはこの種のものをサポートしていますか、それとも運が不幸ですか?

役に立ちましたか?

解決

これは私が思いついた解決策です。 書き換えフィルタを使用すると、ルールが一致したときに呼び出されるメソッドを指定できます。このコールバックメソッドを使用して、現在の環境に基づいてサーバーコンテキストを検索します。この環境固有のコンテキストは、要求の属性として設定されます。これは、ルールの「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);
    }
}
.

それはかなりうまく機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top