Pergunta

Estou no processo de mover o código legado para uma nova implementação.O código legado é hospedado por um servidor com um prefixo "L" para "Legacy". À medida que cada página é movida para o novo servidor, quero que o UrLrewRiteFilter altere o URL.Então eu preciso fazer algo assim:

de: http://lapp.company.com/page1.aspxpara: http://app.company.com/pageOne

A situação é ainda mais complicada porque precisa funcionar em vários ambientes diferentes (desenvolvimento, estágio, produção) onde o nome do servidor muda ligeiramente em cada caso.Por exemplo:

local: http://applocal.companydev.com:8080desenvolvedor: http://app.companydev.comestágio: http://app.companystage.comestímulo: http://app.company.com

Aqui está um exemplo de regra:

  <rule>
    <from>^/offers/buyKit.aspx$</from>
    <to type="redirect">%{context-path}/offers/buyKit</to>
  </rule>

Quando http://lapp.company.com/offers/buyKit.aspx entra, quero que seja alterado para http://app.company.com/offers/buyKit

O urlrewritefilter suporta esse tipo de coisa ou estou sem sorte?

Foi útil?

Solução

Aqui está a solução que eu encontrei.O filtro de reescrita permite especificar um método que será chamado quando a regra for correspondida.Eu uso esse método de retorno de chamada para pesquisar o contexto do servidor com base no ambiente atual.Este contexto específico do ambiente é então definido como um atributo da solicitação, que pode ser usado pelo elemento "to" da regra.

Aqui está a regra atualizada do arquivo 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>

E aqui está o método de configuração de contexto:

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

Funciona muito bem.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top