我不太确定这是否可行-我在网上找到的所有示例均已弃用,例如Spring Boot 2中似乎不存在属性security.http.port
。
我需要的是一种在两个端口上运行Tomcat的方法,例如HTTPS为8443,HTTP为8080。
我还希望/api
下的所有内容都需要HTTPS /api/webhooks
(或至少/webhooks
,因为我仍然可以根据需要更改端点)。
我在想像这样的事情:
@Override
public void configure(HttpSecurity http) throws Exception {
http
.requiresChannel()
.antMatchers("/api/*/webhooks/**")
.requiresInsecure()
.and()
.requiresChannel()
.antMatchers("/**")
.requiresSecure()
.and()
.exceptionHandling()
.and()
.authorizeRequests()
.antMatchers("/api/*/public/**", "oauth/**")
.permitAll()
.antMatchers(HttpMethod.GET, "/*", "/assets/*")
.permitAll()
.antMatchers("/api/**")
.authenticated();
}
可以做到吗?这个问题有一个background-我正在尝试接受作为HTTP POST请求传入的webhook调用。
答案 0 :(得分:0)
这是同时打开http和https的方式。
在您的JAVA环境下,生成一个SSL密钥
keytool -genkey -alias tomcat -dname "CN=Andy" -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 365
并将文件复制到您的资源目录
您的属性应该是这样
# https port
server.port=8443
# http port
server.http.port=8080
# key path
server.ssl.key-store=classpath:keystore.p12
# your key password
server.ssl.key-store-password=mytest
server.ssl.keyStoreType=PKCS12
server.ssl.keyAlias=tomcat
配置其他http端口
@Configuration
public class HttpConfig {
@Value("${server.http.port}")
private int httpPort;
@Bean // (it only works for springboot 2.x)
public ServletWebServerFactory servletContainer(){
TomcatServletWebServerFactory factory = new TomcatServletWebServerFactory();
factory.addAdditionalTomcatConnectors(createStanderConnecter());
return factory;
}
private Connector createStanderConnecter(){
Connector connector =
//new Connector("org.apache.coyote.http11.Http11NioProtocol");
new Connector(TomcatServletWebServerFactory.DEFAULT_PROTOCOL);
connector.setPort(httpPort);
return connector;
}
}