2015-09-28 3 views
10

Я настроил SSL в своем веб-приложении. Я установил сертификат в Tomcat в соответствии с требуемыми шагами.Выполнение 301 перенаправления с http на https в Apache Tomcat

В учебнике, что я Ниже https://www.mulesoft.com/tcat/tomcat-security

Я принудил использование HTTPS через HTTP, что означает, что любой запрос HTTP будет направлен протокол HTTPS. Я сделал следующие изменения в моей server.xml

<Connector port="8080" protocol="HTTP/1.1" 

      connectionTimeout="20000" 

      redirectPort="443" 

      proxyHost="10.1.1.1" proxyPort="80" 

      URIEncoding="UTF-8" 

      maxHttpHeaderSize="32768"/> 

Изменения web.xml следующим образом:

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>SecureConnection</web-resource-name> 
     <url-pattern>/*</url-pattern> 
    </web-resource-collection> 
    <user-data-constraint> 
     <transport-guarantee>CONFIDENTIAL</transport-guarantee> 
    </user-data-constraint> 
</security-constraint> 

Однако редирект то есть временное перенаправление, то есть 302. Я хочу использовать 301 re-direct, т. е. постоянную переадресацию.

Как я могу это достичь?

+0

Вы нашли ответ на этот вопрос? У меня такая же проблема. – Thermometer

+0

То же самое, любой прогресс в этом вопросе? – Default71721

+0

Для гуглеров, просто желающих «принудительно использовать https tomcat», «всегда https tomcat» или аналогичный, это решение. https://jelastic.zendesk.com/hc/en-us/community/posts/206121996-HTTP-HTTPS-redirection-into-the-Tomcat также предоставляет решение. – koppor

ответ

2

Это настроено на вашем королевстве. См. Атрибут transportGuaranteeRedirectStatus вашей конкретной реализации Realm.

https://tomcat.apache.org/tomcat-8.5-doc/config/realm.html

Ex: server.xml имеет это вне коробки

<Realm className="org.apache.catalina.realm.LockOutRealm"> 
    <!-- This Realm uses the UserDatabase configured in the global JNDI 
     resources under the key "UserDatabase". Any edits 
     that are performed against this UserDatabase are immediately 
     available for use by the Realm. --> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase"/> 
    </Realm> 

Он не устанавливает transportGuaranteeRedirectStatus так, то по умолчанию в 302. Если вы хотите, чтобы сделать его использовать 301 , просто добавьте атрибут transportGuaranteeRedirectStatus="301" в Realm (у вас могут не быть вложенные Realms в зависимости от вашей конфигурации) и перезапустите Tomcat.

Ex:

<Realm className="org.apache.catalina.realm.LockOutRealm" transportGuaranteeRedirectStatus="301"> 
    <!-- This Realm uses the UserDatabase configured in the global JNDI 
     resources under the key "UserDatabase". Any edits 
     that are performed against this UserDatabase are immediately 
     available for use by the Realm. --> 
    <Realm className="org.apache.catalina.realm.UserDatabaseRealm" 
      resourceName="UserDatabase" /> 
    </Realm> 

Если вы не имеете Realm тег, определенный в конфигурации, Tomcat будет по умолчанию с использованием NullRealm. Если вы хотите переопределить перенаправление в этой ситуации, вам просто нужно определить NullRealm под свойством transportGuaranteeRedirectStatus, установленным на нем.

Надеюсь, что это поможет!

Смежные вопросы