Как переместить страницы с устаревших серверов с помощью URLREWRITEFILER
-
21-12-2019 - |
Вопрос
Я нахожусь в процессе перемещения устаревшего кода к новой реализации. Унаследованный код размещен сервером с префиксом «L» для «наследия». Поскольку каждая страница перемещена на новый сервер, я хочу URLREWRITEFILTER, чтобы изменить URL. Поэтому мне нужно сделать что-то вроде этого:
От: http://lapp.company.com/page1.aspx to: http://app.company.com/pageone
Ситуация еще более сложная, поскольку для этого необходимо работать над несколькими различными средами (разработчиками, сценой, производством), где имя сервера немного изменяется в каждом случае. Например:
local: 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 поддерживает такого рода вещи, или мне удачи?
Решение
Вот решение, с которым я придумал. Фильтр Rewrite позволяет указывать метод, который будет называться, когда правило совпадает.Я использую этот метод обратного вызова для поиска контекста сервера на основе текущей среды.Этот конкретный контекст окружающей среды затем устанавливается в качестве атрибута запроса, который можно использовать «к» элементу правила.
Вот обновленное правило из файла 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);
}
}
.
Это работает довольно хорошо.