как перемещать страницы с устаревшего сервера с помощью urlrewritefilter

Я нахожусь в процессе перемещения устаревшего кода в новую реализацию. Устаревший код размещается на сервере с префиксом «l» для «устаревшего». Когда каждая страница перемещается на новый сервер, я хочу, чтобы urlrewritefilter менял URL-адрес. Поэтому мне нужно сделать что-то вроде этого:

с: http://lapp.company.com/page1.aspx на: http://app.company.com/pageOne

Ситуация еще более усложняется, потому что это должно работать в нескольких разных средах (dev, stage, production), где имя сервера немного меняется в каждом случае. Например:

локальный: http://applocal.companydev.com:8080 разработчик: http://app.companydev.com этап: http://app.companystage.com продукт: 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 такие вещи, или мне не повезло?


person wholladay    schedule 12.04.2014    source источник


Ответы (1)


Вот решение, которое я придумал. Фильтр перезаписи позволяет указать метод, который будет вызываться при совпадении правила. Я использую этот метод обратного вызова для поиска контекста сервера на основе текущей среды. Затем этот специфичный для среды контекст устанавливается в качестве атрибута запроса, который может использоваться элементом «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);
    }
}

Это работает очень хорошо.

person wholladay    schedule 08.05.2014