如何使用urlrewritefilter从旧服务器移动页面

时间:2014-04-12 18:18:20

标签: tuckey-urlrewrite-filter

我正在将遗留代码移动到新实现。遗留代码由服务器托管,“l”前缀为“legacy”。当每个页面移动到新服务器时,我希望urlrewritefilter更改URL。所以我需要做这样的事情:

来自:http://lapp.company.com/page1.aspx 致:http://app.company.com/pageOne

情况进一步复杂化,因为这需要在几种不同的环境(开发,阶段,生产)上工作,其中服务器名称在每种情况下都会略有变化。例如:

local:http://applocal.companydev.com:8080 开发: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支持这种事情,还是我不幸运?

1 个答案:

答案 0 :(得分:0)

这是我提出的解决方案。 重写过滤器允许您指定在匹配规则时将调用的方法。我使用此回调方法根据当前环境查找服务器上下文。然后将此环境特定上下文设置为请求的属性,可以由&#34;到&#34;规则的要素。

以下是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);
    }
}

效果很好。