我有一个正在运行的tomcat应用程序,它已经具有以下从HTTP到HTTPs的重定向规则:
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />是否可以添加一个例外/规则,即特定的HTTPrequest (http://www.example.com)将被重定向到另一个指定了端口(例如https://www.example.com:8443/test)的特定地址,而无需更改/删除上面的连接器?
发布于 2015-10-22 13:43:13
您所显示的连接器配置不会按照您设想的方式重定向特定的URL。
如果您已经为servlet容器中的web应用程序配置了CONFIDENTIAL传输保证,那么该配置就会起作用。
我的意思是,如果您在该连接器上部署了任何应用程序,其中其web.xml描述符具有如下所示的security-constraint:
<security-constraint>
<web-resource-collection>
<web-resource-name>Secured</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
...
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>然后,Tomcat会将任何匹配的url-pattern重定向到配置的端口,以便使用HTTPS作为传输中的机密性保证。
因此,如果要重定向特定URL,则必须使用特定应用程序配置来补充连接器的配置。
编辑
正如您在评论中建议的那样,这可能是使此配置工作的另一个步骤。一旦你已经配置了http连接器,然后像我告诉你的那样配置了app,你只需要确保你的Tomcat服务器已经配置了HTTPS连接器,其他方式的重定向将不起作用。
要配置此HTTPS连接器,您可以使用以下配置:
<Connector connectionTimeout="20000"
acceptCount="100" scheme="https" secure="true"
port="443" clientAuth="false" sslProtocol="TLS"
keystoreFile="PATH_TO_KEY_STORE"
keystorePass="KEY_STORE_PASS"
keyAlias="KEY_STORE_ALIAS"/> 这是一个示例配置,我没有在其中放置一些对您很重要的属性,如线程属性、执行器等。
最重要的是为HTTPS连接提供服务所需的KeyStore配置。你有官方文档为Tomcat准备一个java KeyStore来服务Here。
发布于 2017-07-05 05:55:43
您可以通过将以下内容添加到tomcat_dir/conf/web.xml的末尾,对部署到tomcat的每个应用程序执行此操作
<security-constraint>
<web-resource-collection>
<web-resource-name>Entire Application</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<!-- auth-constraint goes here if you requre authentication -->
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>所以你不需要在你的网页应用程序的web.xml上更改它。
这应该是可行的,假设你已经让https在另一个端口(通常是443)上工作。如果您没有这样做,请确保您的tomcat_dir/conf/server.xml如下所示:
<!-- Default tomcat connector, changed the redirectPortport from 8443 to 443 -->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<!-- To make https work on port 443 -->
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol"/>
<SSLHostConfig>
<Certificate certificateKeyFile="/your/own/privkey.pem"
certificateFile="/eyour/own/cert.pem"
certificateChainFile="/your/own/chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>发布于 2015-10-25 11:46:55
我有一个正在运行的tomcat应用程序,它已经有了以下从HTTP到HTTPs的重定向规则:
正如马拉古纳回答的那样,该Connector配置不是重定向规则。这只是<transport-guarantee>CONFIDENTIAL</transport-guarantee>触发的重定向时使用的设置。
无法在每个应用程序的基础上覆盖该设置。
如果您需要更好地控制此类重定向,则需要实现您自己的过滤器来实现重定向(if (!request.isSecure()) { response.sendRedirect(...);}),或者配置3rd party one。
//从技术上讲,目前Tomcat8代码中,transport-guarantee触发的重定向都是通过org.apache.catalina.realm.RealmBase.hasUserDataPermission(...)方法来实现的。
https://stackoverflow.com/questions/33208796
复制相似问题