我有一个正在运行的tomcat应用程序,它已经具有以下从HTTP到HTTPs的重定向规则:
<Connector executor="tomcatThreadPool"
port="80"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
是否可以添加一个例外/规则,将特定的http request(http://www . example . com)重定向到另一个特定的地址,并指定一个端口(比如https://www . example . com:8443/test),而不更改/删除上述连接器?
我有一个正在运行的tomcat应用程序,它已经具有以下从HTTP到HTTPs的重定向规则:
正如马拉古纳回答的那样,连接器
配置不是重定向规则。这只是执行由<code>触发的重定向时使用的设置
没有办法根据每个应用程序覆盖该设置。
如果您需要更好地控制此类重定向,您需要实现自己的Filter来实现重定向(if(!request.isSecure()){response.send重定向(…);}
),或配置第三方。
//从技术上讲,在当前的Tomcat 8代码中,由传输保证
触发的重定向是通过org.apache.catalina.realm.RealmBase.hasUserDataPermission(…)
方法执行的。
你可以对部署到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>
这样你就不用在你的webapp的web.xml上改了。
假设您已经有https在另一个端口(通常是443)工作,这应该可以工作。如果没有,请确保您的tomcat_dir/conf/server.xml
如下所示:
<!-- Default tomcat connector, changed the redirectPort 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>
您所展示的连接器配置并没有按照您所设想的方式重定向特定的URL。
如果您在servlet容器中为web应用程序配置了CONFIDENTIAL
传输保证,则该配置起作用。
我的意思是,如果您在该连接器上部署了任何应用程序,其web.xml
描述符具有安全约束
,如下所示:
<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会将任何匹配的< code>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"/>
这是一个示例配置,我没有放置一些对您很重要的属性,例如线程attrs、执行器等。
最重要的是为HTTPS连接提供服务所需的KeyStore配置。这里有为Tomcat提供HTTPS服务的java KeyStore的官方文档。
我使用的是 Java 7、Spring靴 1.1.7 和一个带有嵌入式的 Tomcat 7。 过去,当我使用独立Tomcat时,我会添加一个http连接器,将请求重定向到HTTPS端口: 当我使用嵌入的Tomcat(我没有服务器.xml文件)时,我该怎么做?
我们使用拉维5。要将http连接重定向到https,请使用中间件HttpsProtocol。 在我们的4个测试用例中,只有1个正确工作(最后一个重定向)。其他3种情况的中间件添加了url extra index.php。 http://www.aqualink.az/index.php ---
我想问一下HTTP到HTTPS的重定向。正如我们所知,重定向是通过从web服务器端重定向来实现的。但是,当涉及到https重定向时,它可以通过两种方式完成,服务器端()和应用程序端()。我想知道: 以下哪种方法有效且性能更好。 考虑到同一服务器上的多个域和域,每种方法的优缺点 非常感谢。 参考: 将Laravel中的WWW重定向到非WWW-堆栈溢出
请不要向我推荐超过173票的长而详细的帖子。这对我不起作用。我也试过很多其他的(1,2,3,4)。他们都给我太多的重定向或错误500。因此,我的问题是: 用我的电流。htaccess,这就是发生的情况: https://www.dukescasino.com/-工作完美 https://dukescasino.com/-重定向到上面的内容,这很好 下面的两个选项加载罚款,但它应该重定向到https
我已经在我的 Web 应用程序中配置了 SSL。我已经按照所需的步骤在我的 Tomcat 中安装了证书。 我一直关注的导师是https://www.mulesoft.com/tcat/tomcat-security 我已经强制使用 https over http,这意味着任何对 http 的请求都将转发到 https。我在服务器中进行了以下更改.xml 查看更多:https://www.mules
我jenkins.war部署在Tomcat 9(Linux)上,并将其配置为超文本传输协议和https。 server.xml上的配置 web.xml配置 当jenkins没有被托管时,我能够使用上面的tomcat配置将http重定向到https。但在部署詹金斯之后。war将http重定向到https不起作用。 对于jenkins,将http重定向到https还需要其他配置更改吗?