【问题标题】:How to disable auto redirect from HTTP to HTTPS on Tomcat如何在 Tomcat 上禁用从 HTTP 到 HTTPS 的自动重定向
【发布时间】:2016-07-02 03:55:03
【问题描述】:

有很多手册如何启用从 HTTP 到 HTTPS 的自动重定向。但我需要禁用这样的重定向(根据这个建议SSL everywhere - all the time)。我使用的是 Tomcat 7.x,我需要实现接下来的事情:

  • 所有资源都受到保护(通过 web.xml 中的配置)[完成]

    <security-constraint>
        <web-resource-collection>
            <web-resource-name>Application</web-resource-name>
            <url-pattern>/*</url-pattern>
        </web-resource-collection>
        <user-data-constraint>
            <transport-guarantee>CONFIDENTIAL</transport-guarantee>
        </user-data-constraint>
    </security-constraint>
    
  • 当有人通过 HTTP 发出请求时 - 返回错误(我猜是 HTTP 状态 403)并且没有任何重定向

我已经尝试在server.xml 中删除redirectPort

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

但它只导致重定向到 443 端口(但我预计禁用重定向)。

所以我的问题是:如何禁用从 HTTP 到 HTTPS 的自动重定向并返回错误?

【问题讨论】:

  • 巧合的是,我上周遇到了一个类似的问题,我删除了一个 HTTPS 重定向,但无论我更改什么配置,它似乎都保持在原位。结果证明这是我本地 Windows 中的一些缓存,因为它在其他 PC 和同一台 PC 上的“wget”上运行良好。我不确定缓存发生在哪里,但由于所有本地浏览器都遭受了它的影响,我想它是在 Windows 级别。我想我在某个时候做了一个ipconfig /renew,但不确定这是否有效。长话短说 - 先在另一台电脑上尝试。
  • 不幸的是,这个技巧在我的电脑上失败了!
  • 嗨 Roman,你能解决这个问题吗?我也遇到了同样的问题,如果你成功解决了,请发布答案。谢谢。
  • @Elina 不,我找不到禁止这种重定向的方法。作为一个选项,您可以完全禁用 HTTP 端口(注释/删除 server.xml 中 80/8080 端口的连接器)

标签: tomcat redirect https


【解决方案1】:

看看documentation

redirectPort – 如果此连接器支持非 SSL 请求,并且接收到匹配需要 SSL 传输的请求,Catalina 将自动将请求重定向到此处指定的端口号。

redirectPort只表示端口,但不允许/禁止重定向,如果不指定,Catalina会重定向到默认的https端口(即443)。

所以检查你的web.xml文件(WEB-INF/web.xml和CATALINA_HOME/conf/web.xml),最后你可能会看到security-constraint&lt;web-resource-name&gt;HTTPSOnly&lt;/web-resource-name&gt;&lt;transport-guarantee&gt;CONFIDENTIAL&lt;/transport-guarantee&gt;。将HTTPSOnly 编辑为HTTPSOrHTTP,将CONFIDENTIAL 编辑为NONE

【讨论】:

    【解决方案2】:

    在 Spring Boot 的嵌入式 tomcat 上,将重定向端口设置为 0 不会自动重定向,在我的情况下

    【讨论】:

      【解决方案3】:

      注释掉 conf/web.xml 中的块。这样做,redirectPort 将被忽略。

      【讨论】:

      • 注释掉哪个块?
      • 应用程序 web.xml 中的块
      • 像魅力一样工作!
      猜你喜欢
      • 2019-02-12
      • 1970-01-01
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      • 2015-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多