略过springboot项目的创建步骤
C:/Users/Administrator>keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650
完成后在C:UsersAdministrator目录下就会有一个keystore.p12文件
server.port=443 # 证书路径 server.ssl.key-store=classpath:keystore.p12 # 证书秘钥 server.ssl.key-store-password=javajava # 证书类型 server.ssl.key-store-type=PKCS12 # 证书别名 server.ssl.key-alias=tomcat
keystore.p12是放在resources目录下
当在application.properties中的证书路径是这样时
server.ssl.key-store=keystore.p12
keystore.p12是放在项目根目录下,注意多模块项目,这是非多模块项目的目录结构,这时keystore.p12就是放在了项目根目录
但是打成功jar包运行的时候报错
将jar包解压出来发现里面根本没有keystore.p12文件,说明没有被打包进来,解决办法是将keystore.p12文件放在resources目录下,在application.properties中路径前加上classpath
server.ssl.key-store=classpath:keystore.p12
或者也可以将keystore.p12放在jar包的同级目录下
可见springboot里的classpath指的就是classes目录,rosources目录就是直接映射到classes目录
在启动类添加如下代码
@Bean public TomcatServletWebServerFactory servletContainer() { TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory () { @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); } }; tomcat.addAdditionalTomcatConnectors(initiateHttpConnector()); return tomcat; } /** * 让我们的应用支持HTTP是个好想法,但是需要重定向到HTTPS, * 但是不能同时在application.properties中同时配置两个connector, * 所以要以编程的方式配置HTTP connector,然后重定向到HTTPS connector * @return Connector */ private Connector initiateHttpConnector() { Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol"); connector.setScheme("http"); connector.setPort(80); // http端口 connector.setSecure(false); connector.setRedirectPort(443); // application.properties中配置的https端口 return connector; }
@RestController public class TestController { @GetMapping(value = "/") public String hello() { return "你好"; } }
在浏览器地址栏输入localhost,回车即可看到
在地址栏输入localhost相当于 http://localhost :80,回车切换成 https://localhost :443,因为80和443端口分别是http和https的默认端口,所以都隐藏了,如何同时支持http和https而端口不会变的,目前还在探索中。。
码云代码