一、操作流程
1.获取证书文件
从证书供应商处下载对应tomcat适配的jks文件以及秘钥。
2.迁移证书
a.将jks证书文件拷贝至项目资源目录resouces下。
b.也可将证书存放至项目外,但后续配置路径需使用绝对路径。
3.修改项目配置文件
#https加密端口号 443 server.port=443 #SSL证书路径 一定要加上classpath: #改成自己需要的证书名 server.ssl.key-store=classpath:*****.jks #SSL证书密码 server.ssl.key-store-password=12345678 #证书类型 server.ssl.key-store-type=JKS server.ssl.enabled=true
3.修改项目启动类
package com.barry.login;import org.apache.catalina.Context;import org.apache.catalina.connector.Connector;import org.apache.tomcat.util.descriptor.web.SecurityCollection;import org.apache.tomcat.util.descriptor.web.SecurityConstraint;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;import org.springframework.context.annotation.Bean;@SpringBootApplicationpublic class DiyApplication {
public static void main(String[] args) {
SpringApplication.run(DiyApplication.class, args);
}
/**
* http重定向到https
* @return
*/
@Bean
public TomcatServletWebServerFactory servletContainer() {
TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
@Override
protected void postProcessContext(Context context) {
SecurityConstraint constraint = new SecurityConstraint();
constraint.setUserConstraint("CONFIDENTIAL");
SecurityCollection collection = new SecurityCollection();
collection.addPattern("/*");
collection.addMethod(DEFAULT_PROTOCOL);
constraint.addCollection(collection);
context.addConstraint(constraint);
}
};
tomcat.addAdditionalTomcatConnectors(httpConnector());
return tomcat;
}
@Bean
public Connector httpConnector() {
Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
connector.setScheme("http");
//Connector监听的http的端口号
connector.setPort(8080);
connector.setSecure(false);
//监听到http的端口号后转向到的https的端口号
connector.setRedirectPort(443);//可调整到自己所需要的端口号,与配置文件中端口统一 return connector;
}}
4.修改pom配置
防止java编译时对证书文件进行压缩破坏秘钥。
配置完成后先执行clean。
<build> <resources> <resource> <directory>src/main/resources</directory> <filtering>true</filtering> <excludes> <exclude>*.jks</exclude> </excludes> </resource> <resource> <directory>src/main/resources</directory> <filtering>false</filtering> <includes> <include>*.jks</include> </includes> </resource> </resources></build>
二、问题整理
1.项目编译打包时报错
Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources) on project ***: Input length = 1 -> [Help 1]
解决方案:在上述pom中添加的配置项导致报错,删除后改为将证书文件迁移至项目外,配置文件路径改为绝对路径,证书就能生效。
2.http的post请求被重定向至https的get方法导致无法定位。
解决方案:在上述启动类的servletContainer方法中添加 collection.addMethod(DEFAULT_PROTOCOL);
转自:https://www.jianshu.com/p/e6de273342ae