Выполните 301 переадресацию с http на https в Apache Tomcat

Я настроил SSL в своем веб-приложении. Я установил сертификат в 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, т.е. Постоянное перенаправление.

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

Ответ 1

Это настроено в вашем Царстве. См. Атрибут 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.

Пример:

  <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, установленным на нем.

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