Spring Boot Https SSL 实现

SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通讯提供安全及数据完整性的一种安全协议。TLS与SSL在传输层对网络链接进行加密。html

在B/SWeb的应用中,是经过Https实现SSL的,Https是http的安全版,Https的安全基础就是SSLjava

在Spring Boot中 tomcat是内置的,因此和SpringMvc实现Https(将证书配置到tomcat/conf/server.xml)的方式不一样。web

下面介绍如何在Spring Boot中实现Https spring

1:利用java JDK 自带工具 keytool 建立证书,建立证书这部分略过,可自行百度。apache

2:springboot配置SSLtomcat

    添加一个index.html放入到src/main/resources/static下,做为测试安全

     将keytool生成的.keystore文件复制到项目的根路径,而后在application.properties中作以下配置:springboot

    server.port=8443

    server.ssl.key-store=.keystore

    #建立证书时输入的密码    

     server.ssl.key-store-password=11111

    server.ssl.keyStoreType=JKS

    server.ssl.keyAlias=tomcat

此时启动项目,访问:https:localhost:8443 就能够看到index.html了网络

3 http跳转到httpsapp

    不少时候咱们输入http访问网站时例如百度,都会自动跳转到https上,要实现这个功能 咱们须要配置EmbeddedServletContainerFactory

 

package com.wisely.ch7_4;

import java.util.concurrent.TimeUnit;

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.ConfigurableEmbeddedServletContainer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer;
import org.springframework.boot.context.embedded.EmbeddedServletContainerFactory;
import org.springframework.boot.context.embedded.ErrorPage;
import org.springframework.boot.context.embedded.tomcat.TomcatEmbeddedServletContainerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Component;

@SpringBootApplication
public class Chapter511Application {

    public static void main(String[] args) {
        SpringApplication.run(Ch74Application.class, args);
    }
    
    
    @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(httpConnector());
      return tomcat;
    }
    @Bean
    public Connector httpConnector() {
      Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
      connector.setScheme("http");
      connector.setPort(8080);
      connector.setSecure(false);
      connector.setRedirectPort(8443);
      return connector;
    }
}

此时启动项目,访问8080端口 会自动跳转到https 8443

相关文章
相关标签/搜索