Перенаправление на другой хост в Spring Boot (не с www на www) - PullRequest
0 голосов
/ 29 марта 2019

Я настроил свой проект с самозаверяющим сертификатом и настроил перенаправление небезопасного http на https. Я также хочу перенаправить запрос к узлу без префикса "www." к узлу, который делает, например, когда мы делаем запрос к https://google.com, он автоматически перенаправляется на https://www.google.com.

Теперь, чтобы сделать это, я нашел библиотеку с именем UrlRewriteFilter , но эта библиотека имеет конфигурацию, доступную в XML. Я попытался преобразовать конфигурацию XML в эквивалент Java, но мне не повезло, так как я не смог найти методы, эквивалентные Java. Я попытался преобразовать конфигурацию, взяв ссылку из этого ресурса Baeldung . Ниже приведена конфигурация на основе XML. Я использую Spring Boot 1.5.19 со встроенным сервером undertow. Пожалуйста, помогите.

Зависимость 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>

1 Ответ

1 голос
/ 31 марта 2019

Я должен ответить на свой вопрос здесь, так как я обнаружил, что для этой библиотеки нет эквивалентной конфигурации Java, так как в последний раз она поддерживалась в 2012 году. Решение представляет собой сочетание конфигурации Java и XML.Этой конфигурации можно избежать, если вы используете обратный прокси-сервер.Тем не менее, я хотел избежать этого и иметь один сервер приложений, чтобы делать все что угодно.Итак, вот оно:

Файл конфигурации:

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

Структура проекта:

project structure

Афайл 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>

Очень важный момент, на который следует обратить внимание , - это то, что мне пришлось удалить небезопасное перенаправление с http на https в конфигурации сервера Undertow, так как оно вызвалоошибка - "СЛИШКОМ МНОГО РЕДИРЕКТОВ".Поэтому я оставил открытыми два порта - 80 и 443 для небезопасных и безопасных соединений, а конфигурация Tuckey выполняет все виды перенаправления, с http на https и с non-www на www.Надеюсь, это поможет.

...