2 votes

Redirection vers un hôte différent dans Spring Boot (URL nonwww vers www)

J'ai configuré mon projet avec un certificat auto-signé et j'ai configuré la redirection de http non sécurisé vers https. Je veux aussi rediriger une requête vers un hôte sans " www. "vers un hôte qui le fait, comme lorsque nous faisons une demande à https://google.com il est automatiquement redirigé vers https://www.google.com .

Pour ce faire, j'ai trouvé une bibliothèque appelée UrlRewriteFilter mais cette bibliothèque a une configuration disponible en XML. J'ai essayé de convertir la configuration XML en une configuration équivalente en java mais je n'ai pas eu de chance car je n'ai pas pu trouver les méthodes équivalentes en java. J'ai essayé de convertir la configuration en prenant la référence de cette ressource Baeldung . Vous trouverez ci-dessous la configuration basée sur XML. J'utilise Spring Boot 1.5.19 avec un serveur undertow intégré. Veuillez m'aider.

Dépendance Maven :

<dependency>
  <groupId>org.tuckey</groupId>
  <artifactId>urlrewritefilter</artifactId>
  <version>4.0.4</version>
</dependency>

web.xml

<filter>
    <filter-name>UrlRewriteFilter</filter-name>
    <filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter-mapping>
  <filter-name>UrlRewriteFilter</filter-name>
  <url-pattern>/*</url-pattern>
  <dispatcher>REQUEST</dispatcher>
  <dispatcher>FORWARD</dispatcher>
</filter-mapping>

urlrewrite.xml

<urlrewrite>
  <rule>
    <name>seo redirect</name>
    <condition name="host" operator="notequal">^www.csetutorials.com</condition>
    <from>^/(.*)</from>
    <to type="permanent-redirect" last="true">http://www.csetutorials.com/$1</to>
  </rule>
</urlrewrite>

2voto

Samim Points 731

Je dois répondre ici à ma propre question car j'ai découvert qu'il n'existe pas de configuration équivalente à Java pour cette bibliothèque, car sa dernière maintenance remonte à 2012. La solution est un mélange de configuration Java et XML. Cette configuration peut être évitée si vous utilisez un serveur proxy inverse. Cependant, je voulais éviter cela et avoir le serveur d'application unique pour faire toutes sortes de choses. Alors voilà :

Le fichier de configuration :

@Configuration
public class UrlRewriteConfig extends UrlRewriteFilter {

    private UrlRewriter urlRewriter;

    @Bean
    public FilterRegistrationBean tuckeyRegistrationBean() {
        final FilterRegistrationBean registrationBean = new FilterRegistrationBean();
        registrationBean.setFilter(new UrlRewriteConfig());
        return registrationBean;
    }

    @Override
    public void loadUrlRewriter(FilterConfig filterConfig) throws ServletException {
        try {
            ClassPathResource classPathResource = new ClassPathResource("urlrewrite.xml");
            InputStream inputStream = classPathResource.getInputStream();
            Conf conf1 = new Conf(filterConfig.getServletContext(), inputStream, "urlrewrite.xml", "");
            urlRewriter = new UrlRewriter(conf1);
        } catch (Exception e) {
            throw new ServletException(e);
        }
    }

    @Override
    public UrlRewriter getUrlRewriter(ServletRequest request, ServletResponse response, FilterChain chain) {
        return urlRewriter;
    }

    @Override
    public void destroyUrlRewriter() {
        if (urlRewriter != null)
            urlRewriter.destroy();
    }
}

La structure du projet :

project structure

Et le fichier urlrewrite.xml :

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE urlrewrite
        PUBLIC "-//tuckey.org//DTD UrlRewrite 3.0//EN"
        "http://www.tuckey.org/res/dtds/urlrewrite3.0.dtd">

<urlrewrite>
    <rule>
        <name>SEO Redirect and Secure Channel</name>
        <condition name="host" operator="equal">^example.com</condition>
        <from>^(.*)$</from>
        <to type="permanent-redirect">https://www.example.com$1</to>
    </rule>
</urlrewrite>

Un point très important à noter J'ai dû supprimer ma redirection non sécurisée de http vers https dans la configuration du serveur Undertow, car elle générait une erreur - "TOO MANY REDIRECTS". Ce que j'ai fait, c'est que j'ai gardé deux ports ouverts - 80 et 443 pour les connexions sécurisées et non sécurisées et la configuration Tuckey fait toutes sortes de redirections, de http à https et de non-www à www. J'espère que cela vous aidera.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X