Как переместить страницы с устаревших серверов с помощью URLREWRITEFILER

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

  •  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);
    }
}
.

Это работает довольно хорошо.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top