对于基于Spring Boot的应用程序,我在application.properties上配置了ssl属性,请在此处查看我的配置:
server.port=8443 server.ssl.key-alias=tomcat server.ssl.key-password=123456 server.ssl.key-store=classpath:key.p12 server.ssl.key-store-provider=SunJSSE server.ssl.key-store-type=pkcs12
我在Application.class上添加了连接,例如
@Bean public EmbeddedServletContainerFactory tomcatEmbeddedServletContainerFactory() { final TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory(); factory.addAdditionalTomcatConnectors(this.createConnection()); return factory; } private Connector createConnection() { final String protocol = "org.apache.coyote.http11.Http11NioProtocol"; final Connector connector = new Connector(protocol); connector.setScheme("http"); connector.setPort(9090); connector.setRedirectPort(8443); return connector; }
但是当我尝试以下方法时
http://127.0.0.1:9090/
重定向到
https://127.0.0.1:8443/
不执行。谁遇到过类似的问题?
为了使Tomcat执行重定向,您需要使用一个或多个安全约束对其进行配置。您可以通过Context使用TomcatEmbeddedServletContainerFactory子类对进行后期处理来实现。
Context
TomcatEmbeddedServletContainerFactory
例如:
TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() { @Override protected void postProcessContext(Context context) { SecurityConstraint securityConstraint = new SecurityConstraint(); securityConstraint.setUserConstraint("CONFIDENTIAL"); SecurityCollection collection = new SecurityCollection(); collection.addPattern("/*"); securityConstraint.addCollection(collection); context.addConstraint(securityConstraint); } };
由于CONFIDENTIAL和/*,这将导致Tomcat将每个请求重定向到HTTPS。如果需要对什么是重定向和不重定向进行更多控制,则可以配置多个模式和多个约束。
CONFIDENTIAL
/*