Spring Boot“重定向POST请求到Catalina连接器的https端口时,请求方法'GET'不受支持”

3
我正在尝试通过Catalina Connector在我的Spring Boot应用程序中将http重定向到https。如果传入的POST请求是“https”,则按预期工作。但是,如果我的传入POST请求是“http”,并且经过以下代码重定向到“https”,则由于某种原因它会被更改为GET,因此我会收到以下警告:

WARN 45028 --- [nio-8443-exec-8] o.s.web.servlet.PageNotFound:不支持请求方法'GET'

下面是我@SpringBootApplication类中的方法:

@Bean
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
        @Override
        protected void postProcessContext(org.apache.catalina.Context context) {
          SecurityConstraint securityConstraint = new SecurityConstraint();
          securityConstraint.setUserConstraint("CONFIDENTIAL");
          SecurityCollection collection = new SecurityCollection();
          collection.addPattern("/*");
          securityConstraint.addCollection(collection);
          context.addConstraint(securityConstraint);
        }
    };

    tomcat.addAdditionalTomcatConnectors(initiateHttpConnector());
    return tomcat;
 }

private Connector initiateHttpConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(10024);
    connector.setSecure(false);
    connector.setRedirectPort(8443);

    return connector;
 }

你解决了这个问题吗?我也遇到了同样的问题。 - juventus
1个回答

1
在代码中重写postProcessContext()方法后,添加collection.addMethod(DEFAULT_PROTOCOL);这一行。它能正常工作并处理所有HTTP请求方法,如POST,PUT,DELETE,GET等。

1
DEFAULT_PROTOCOL 是什么? - Dmytro Titov
postProcessContext 中添加 collection.addMethod("org.apache.coyote.http11.Http11NioProtocol") - observer
这个能扩展吗?我不确定我理解了。 - JGleason

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接