Pregunta

Estoy en el proceso de mover el código heredado a una nueva implementación. El código heredado está alojado por un servidor con un prefijo "L" para "Legacy". A medida que se mueve cada página al nuevo servidor, quiero que UrlrewriteFilter cambie la URL. Así que necesito hacer algo como esto:

De: http://lapp.company.com/page1.aspx a: http://app.company.com/pagone

La situación se complica aún más porque esto debe trabajar en varios entornos diferentes (dev, etapa, producción) donde el nombre del servidor cambia ligeramente en cada caso. Por ejemplo:

Local: http://applocal.companydev.com:8080 dev: http://app.companydev.com Etapa: http://app.companystage.com PROD: http://app.company.com

Aquí hay una regla de ejemplo:

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

cuando http://lapp.company.com/offers/buykit.aspx Entra, quiero que se cambie a http://app.company.com/offers/buykit

¿Soporta UrlrewriteFilter este tipo de cosas, o estoy fuera de la suerte?

¿Fue útil?

Solución

Aquí está la solución con la que se me ocurrió. El filtro de reescritura le permite especificar un método que se llamará cuando se haga coincidir la regla.Utilizo este método de devolución de llamada para buscar el contexto del servidor basado en el entorno actual.Este contexto específico del entorno se establece entonces como un atributo de la solicitud, que puede ser utilizada por el elemento "a" de la regla.

Aquí está la regla actualizada del archivo 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>

y aquí está el método de configuración del 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 bastante bien.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top