Springboot配置https访问
2017-09-21 17:00
411 查看
1. 购买或本地生成ssl证书
要使用https,首先需要ssl证书,获取SSL证书有两种方式:自己通过keytool生成
通过证书授权机构购买
作为演示,我们使用keytool生成:
C:\Users\xxx>keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650 输入密钥库口令: 再次输入新口令: 您的名字与姓氏是什么? [Unknown]: xxx 您的组织单位名称是什么? [Unknown]: xxx 您的组织名称是什么? [Unknown]: xxx 您所在的城市或区域名称是什么? [Unknown]: beijing 您所在的省/市/自治区名称是什么? [Unknown]: beijing 该单位的双字母国家/地区代码是什么? [Unknown]: china CN=xxx, OU=xxx, O=xxx, L=beijing, ST=beijing, C=china是否正确? [否]: y
会在当前目录下生成一个证书:keystore.p12,同时记住你在生成证书时候输入的密钥库口令。
2. 创建一个Springboot项目
我习惯使用maven创建,在pom.xml中引入:<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>1.5.7.RELEASE</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
在src/main/java下创建一个包,如果不创建包,直接在src/main/java建立项目,那么spring扫描不到,会导致项目无法启动。
3. Https相关配置
application.propertiesserver.port: 7443 server.ssl.key-store: classpath:keystore.p12 server.ssl.key-store-password: 生成证书时候输入的密钥库口令 server.ssl.keyStoreType: PKCS12 server.ssl.keyAlias: tomcat
App.java
package cn.ac.iie; 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.context.embedded.EmbeddedServletContainerFactory; import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory; import org.springframework.context.annotation.Bean; @SpringBootApplication public class App { /** * Spring application main function * @param args * @throws Exception */ public static void main(String[] args) throws Exception { SpringApplication.run(App.class, args); } /** * 配置一个TomcatEmbeddedServletContainerFactory bean * @return */ @Bean public EmbeddedServletContainerFactory servletContainer() { 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); } }; 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(8080); // http端口 connector.setSecure(false); connector.setRedirectPort(7443); // application.properties中配置的https端口 return connector; } }
3. 测试
编写测试类:package cn.ac.iie.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; @Controller public class TestController { @RequestMapping("/") @ResponseBody String home() { return "Hello World!"; } }
浏览器访问测试成功,但是因为是自己生产的证书,所以在chrome中显示连接不安全。忽略即可。
相关文章推荐
- springboot配置https访问的方法
- 【狼人杀plus全记录】SpringBoot配置SSL证书实现Https访问
- HTTP访问转HTTPS访问的总结--关于本地https访问以及服务器https访问配置
- Tomcat配置https及访问http自动跳转至https
- 配置Nginx网站https访问、http共存访问
- Nginx+Tomcat服务器环境中配置https访问
- Nginx下配置网站ssl实现https访问
- 关于阿里云ecs配置https访问的若干问题
- apache的https访问配置
- Nginx配置https访问
- php网站实现https加密访问,wamp下配置openssl
- Windows Server 2008 R2 下配置证书服务器和HTTPS方式访问网站
- certbot在Centos7上配置合法签名证书,实现nginx的https访问
- Nginx配置同一个域名同时支持http与https两种方式访问
- Windows下Nginx配置SSL实现Https访问(包含证书生成)
- 配置https域名的访问搭建
- 简单配置HTTPS 认证访问
- Tomcat配置https及访问http自动跳转至https
- Nginx配置同一个域名http与https两种方式都可访问