在Apache Tomcat中执行301从httpredirect到https

我在我的Web应用程序中configuration了SSL。 我已经按照所需的步骤在我的Tomcat中安装了证书。

我一直在使用的教程是https://www.mulesoft.com/tcat/tomcat-security

我强制使用https over 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"/> 
  • 有关更多信息,请访问: https : //www.mulesoft.com/tcat/tomcat-security#sthash.6zIVA27x.dpuf

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> 

但是,正在发生的redirect是暂时redirect,即302.我想使用301redirect,即永久redirect。

我怎样才能做到这一点?

这是在你的领域配置的。 请参阅特定Realm实现的transportGuaranteeRedirectStatus属性。

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

例如: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 。 如果您想在这种情况下覆盖重定向,您只需要在其上设置transportGuaranteeRedirectStatus属性来定义一个NullRealm。

希望有所帮助!