当前位置: 首页 > 知识库问答 >
问题:

在单个tomcat实例上混合使用https和http

殳宸
2023-03-14

我有一个应用程序,它通常在https中工作。Tomcat监听端口8443:

<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
           maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
           clientAuth="false" sslProtocol="TLS"
           keyAlias="MY_ALLIAS" keystoreFile="PATH_TO_MY_KEY"
           keystorePass="MY_PASWORD" />

Apache监听80并重定向到8443:

<VirtualHost *:80>
        ServerAdmin MY_EMAIL_ADDRESS
        ServerName localhost
        ServerAlias localhost
        ProxyPass / http://localhost:8443/
        ProxyPassReverse / http://localhost:8443/
        DocumentRoot /var/www/html

最后,我在web.xml中添加了:

<security-constraint>
    <web-resource-collection>
        <web-resource-name>MY_WEB_RESOURCE_NAME</web-resource-name>
        <url-pattern>/welcome</url-pattern>
    </web-resource-collection>
    <user-data-constraint>
        <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
</security-constraint>

不幸的是,我必须将带有http站点的IFRAME添加到我的一个网站中。那里的安全不是问题。我的问题是Tomcat配置。我想我会用阿帕奇调度交通。但现在我的问题是如何设置Tomcat,这样我就可以为站点http://localhost:8080/siteA提供服务,而所有其他站点都将在https://localhost:8443/my others sites上提供服务?我尝试删除redirectPort="8443 ",但这还不够。我使用的是Tomcat 9.0.0.M4(如果需要的话,迁移到Tomcat 8不成问题)。请帮帮忙!

共有1个答案

卢阳成
2023-03-14

要解决此问题,请再添加一个<code>

<security-constraint>
<web-resource-collection>
<web-resource-name>Unsecured resources</web-resource-name>
<url-pattern>/siteA</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>NONE</transport-guarantee>
</user-data-constraint>
</security-constraint> `

由于您已将传输保证设置为NONE,tomcat将不会验证其是否为安全资源

 类似资料:
  • 问题内容: 我需要同时运行两个AudioTrack实例。它们必须单独运行,因为我以不同的可变采样率播放它们。我发现,如果我在同一线程中运行它们,它们将“轮流”运行。我在各自的线程中运行它们,但是音频断断续续。 关于使两个实例更好玩的任何想法?如果没有,那么即使我想以不同的采样率播放两个短缓冲区,也有一些技巧将它们混合在一起。 问题答案: 我有4个音轨同时播放,它们似乎播放得很好。在HTC Desi

  • 问题内容: 是否可以创建具有相同路由和相同中间件的,同时侦听HTTP和HTTPS的Express服务器? 目前,我在高速上的HTTP做到这一点,有安全通道隧道HTTPS来表达,但我更喜欢一个纯粹的节点解决方案。 我可以使用以下代码来做到这一点,但是可以使用标记为私有的方法: 问题答案: 您可以通过以下方式共享实现:

  • 假设我在单个Tomcat实例中部署了一个WAR。WAR包含两个servlet:一个用于客户端请求,另一个用于管理。现在我想在不同的端口上运行这些servlet。我可以使用相同的单个WAR和单个Tomcat实例来做到这一点吗?

  • 我有一个部署在Glassfish上的应用程序,并侦听端口8181以获取HTTPS流量(当前)。问题是在部署时,客户很少为服务器创建有效证书。这意味着HTTPS无法通过证书检查。 在我们的应用程序中,我们希望通过HTTP获取某些类型的内容,因为它是静态的,并且获取未加密这一事实不是问题。 我们确实存在的问题是,只有端口8181可供用户使用(防火墙等不能更改)。 因此,我们需要一种方法让Glassfi

  • 我有一个部署在tomcat上的应用程序,并且正在运行。Tomcat安装在unix操作系统上。我想部署一个相同应用程序的另一个副本(几乎没有代码更改,相同的应用程序名称)到同一个tomcat实例,在不同的端口上运行。是否可以在tomcat的同一个实例上使用不同的端口运行相同的应用程序。是否在单个jvm上运行单个tomcat实例?。如果是这样,那么会出现什么问题? 提前谢谢

  • 我用状态存储构建了一个kafka流媒体应用程序。现在我正在尝试扩展这个应用程序。当在三个不同的服务器上运行应用程序时,Kafka会随机拆分分区和状态存储。 例如: Instance1获取:分区-0,分区-1 Instance2获取:partition-2,stateStore-repartition-0 Instance3获取:stateStore-重新分区-1,stateStore-重新分区-2