como mover páginas do servidor legado usando urlrewritefilter
-
21-12-2019 - |
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?
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.