Domanda

Sono nel processo di spostamento del codice legacy a una nuova implementazione. Il codice legacy è ospitato da un server con un prefisso "L" per "legacy". Poiché ogni pagina viene spostata sul nuovo server che voglio urlrewritefilter per modificare l'URL. Quindi ho bisogno di fare qualcosa del genere:

Da: http://lapp.company.com/page1.aspx A: http://app.company.com/pageone

La situazione è ulteriormente complicata perché questa deve funzionare su diversi ambienti (dev, fase, produzione) in cui il nome del server cambia leggermente in ciascun caso. Ad esempio:

Locale: http://applocal.companydev.com:8080 Dev: http://app.companydev.com Stage: http://app.companystage.com PROD: http://app.company.com

Ecco una regola di esempio:

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

Quando http://lapp.company.com/offers/buykit.aspx entra, voglio che sia cambiato in http://app.company.com/offers/buykit

urlrewritefilter supporta questo genere di cose, o sono fuori fortuna?

È stato utile?

Soluzione

Ecco la soluzione con cui ho trovato. Il filtro di riscrittura consente di specificare un metodo che verrà chiamato quando la regola è abbinata.Io uso questo metodo di richiamata per cercare il contesto del server in base all'ambiente corrente.Questo contesto specifico dell'ambiente viene quindi impostato come attributo della richiesta, che può essere utilizzato dall'elemento "a" della regola.

Ecco la regola aggiornata dal file 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>
.

Ed Ecco il metodo di impostazione del contesto:

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

funziona abbastanza bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top