我正在将遗留代码移动到新实现。遗留代码由服务器托管,“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支持这种事情,还是我不幸运?
答案 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);
}
}
效果很好。