Question

Je suis en train de déplacer le code hérité à une nouvelle implémentation. Le code hérité est hébergé par un serveur avec un préfixe "L" pour "héritage". Comme chaque page est déplacée vers le nouveau serveur, je veux Urlrewritefilter de changer l'URL. Donc, j'ai besoin de faire quelque chose comme ça:

de: http://lapp.company.com/page1.aspx à: http://app.company.com/pageone

La situation est compliquée davantage car elle doit fonctionner sur plusieurs environnements différents (Dev, étape, production) où le nom du serveur change légèrement dans chaque cas. Par exemple:

local: http://applocal.companydev.com:8080 Dev: http://app.companydev.com Étape: http://app.companystage.com Prod: http://app.company.com

Voici un exemple de règle:

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

Quand http://lapp.company.com/offers/buykit.aspx Entre, je veux que cela soit changé pour http://app.company.com/offers/buykit

UrrrewriteFilter soutient ce genre de chose, ou je n'ai pas de chance?

Était-ce utile?

La solution

Voici la solution que j'ai proposée. Le filtre de réécriture vous permet de spécifier une méthode qui sera appelée lorsque la règle est appariée.J'utilise cette méthode de rappel pour rechercher le contexte du serveur en fonction de l'environnement actuel.Ce contexte spécifique à l'environnement est ensuite défini comme attribut de la demande, qui peut être utilisé par l'élément "à" de la règle.

Voici la règle mise à jour du fichier 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>

et voici la méthode de réglage de contexte:

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

Cela fonctionne assez bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top