Перенаправление HTTP на HTTPS в Undertow

Как настроить перенаправление HTTP->HTTPS в Undertow? Я просмотрел кодовую базу Undertow, есть несколько классов, которые кажутся уместными (например, RedirectHandler). Кроме того, документация Undertow (Атрибуты и обработчики предикатов), кажется, нацелена именно на это. проблема среди прочих. Но я не уверен, с чего начать.

По сути, я ищу аналог конфигурации Apache mod_rewrite:

RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

Спасибо!


person siphiuel    schedule 13.01.2015    source источник


Ответы (1)


Этот ответ указывает в правильном направлении. Программно нужно добавить SecurityConstraint к Builder и установить ConfidentialPortManager:

DeploymentInfo servletBuilder = Servlets.deployment();
servletBuilder.addSecurityConstraint(new SecurityConstraint()
  .addWebResourceCollection(new WebResourceCollection()
    .addUrlPattern("/*"))
  .setTransportGuaranteeType(TransportGuaranteeType.CONFIDENTIAL)
  .setEmptyRoleSemantic(EmptyRoleSemantic.PERMIT))
  .setConfidentialPortManager(new ConfidentialPortManager() {
    @Override
    public int getConfidentialPort(HttpServerExchange exchange) {
      return 443;
    }
  }
);
person siphiuel    schedule 19.01.2015
comment
Можно ли с помощью этого метода использовать постоянное перенаправление 301 вместо перенаправления 302 по умолчанию? - person Thermometer; 19.02.2016
comment
@Thermometer - не уверен, никогда не пробовал перенаправлять с помощью DeploymentInfo. - person siphiuel; 24.02.2016
comment
Если вам нужна полная реализация, обратитесь к следующему stackoverflow.com/a/54908727/7538821. - person sam; 27.02.2019