ABR*_*ABR 21 apache https tomcat web-applications server.xml
我有一个正在运行的tomcat应用程序,它已经具有从HTTP到HTTP的以下重定向规则:
<Connector executor="tomcatThreadPool"
port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
Run Code Online (Sandbox Code Playgroud)
是否可以添加例外/规则,特定的HTTPrequest(http://www.example.com)将被重定向到指定端口的另一个特定地址(例如https://www.example.com: 8443/test),无需更换/拆卸上述连接器?
mal*_*una 19
您显示的连接器配置不会以您想象的方式重定向特定URL.
如果已CONFIDENTIAL为该servlet容器内的Web应用程序配置传输保证,则该配置将起作用.
我的意思是,如果您在该连接器上部署了任何应用程序,其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>
Run Code Online (Sandbox Code Playgroud)
然后,Tomcat会将任何匹配重定向url-pattern到配置的端口,以便使用HTTPS作为传输机密性的保证.
因此,如果要重定向特定URL,则必须使用特定应用程序配置来补充连接器的配置.
正如您在评论中所建议的那样,这可能是让这种配置正常工作的另一个步骤.如图所示配置http连接器,然后按照我的说明配置应用程序,您只需要确保您的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"/>
Run Code Online (Sandbox Code Playgroud)
这是一个示例配置,我没有将一些对您来说很重要的属性作为线程attrs,executor等等.
最重要的是您需要为HTTPS连接提供服务的KeyStore配置.在这里,您可以获得官方文档,以便为Tomcat准备用于提供HTTPS的Java KeyStore.
Mat*_*ari 17
您可以通过将其添加到以下结尾来对部署到tomcat的每个应用程序执行此操作tomcat_dir/conf/web.xml:
<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>
Run Code Online (Sandbox Code Playgroud)
因此,您不必在webapp的web.xml上更改它.
假设您已经在另一个端口(通常是443)中运行https,那应该可行.如果你不这样做,请确保你的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>
Run Code Online (Sandbox Code Playgroud)
Kon*_*nko 10
我有一个正在运行的tomcat应用程序,它已经具有从HTTP到HTTP的以下重定向规则:
正如malaguna所回答的那样,该Connector配置不是重定向规则.它只是在执行由重定向触发时使用的设置<transport-guarantee>CONFIDENTIAL</transport-guarantee>.
无法基于每个应用程序覆盖该设置.
如果您需要更好地控制此类重定向,则需要实现自己的Filter,它将实现重定向(if (!request.isSecure()) { response.sendRedirect(...);})或配置第三方.
//从技术上讲,在当前的Tomcat 8代码中,触发的重定向transport-guarantee是由org.apache.catalina.realm.RealmBase.hasUserDataPermission(...)方法执行的.
| 归档时间: |
|
| 查看次数: |
47828 次 |
| 最近记录: |