springboot实现将项目http访问转换为https访问

首先 下载ssl证书  可以在支付宝等大平台申请  因为本地jdk获取的证书在网页连接中会提示不安全,是不被浏览器认可的。

在Windows下的命令 (在系统jdk的bin目录下执行)

keytool -genkey -alias tomcat -storetype PKCS12 -keyalg RSA -keysize 2048 -keystore keystore.p12 -validity 3650

在linux命令下获取(在系统jdk的bin目录下执行)

keytool -genkey -alias tomcat -keyalg RSA -validity 20000 -keystore keystore.p12 

 

会生成一个keystore.p12的文件

关于keytool的说明:
keytool -genkey -alias 你的证书别名 -keyalg 密钥算法 -keystore 证书库文件保存的位置和文件名 -keysize 密钥长度 -validity 证书有效期天数

配置application.yml

server:
  port: 8081
  ssl:
    key-store: keystore.p12
    key-store-password: test08
    key-store-type: PKCS12
    key-alias: tomcat

将上面生成的keystore.p12文件移动到classpath下。

这时候https就可以访问了  但是和http是不兼容的  还要在启动类里面配置

import com.InitConfiguration;
import com.InitServiceConfiguration;
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.CommandLineRunner;
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;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.transaction.annotation.EnableTransactionManagement;

//import javax.servlet.MultipartConfigElement;

@Configuration
@EnableTransactionManagement
@SpringBootApplication
@Import({InitServiceConfiguration.class, InitConfiguration.class})
@ComponentScan("com.********")
public class AppApiApplication implements CommandLineRunner{

    public static void main(String[] args) {
        SpringApplication.run(AppApiApplication.class, args);
    }

  

    @Bean
    public EmbeddedServletContainerFactory servletContainer() {
        TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory() {
            @Override
            protected void postProcessContext(Context context) {
               //将http访问重定向到https访问

                SecurityConstraint constraint = new SecurityConstraint();
                constraint.setUserConstraint("CONFIDENTIAL");
                SecurityCollection collection = new SecurityCollection();
                collection.addPattern("/*");
                constraint.addCollection(collection);
                context.addConstraint(constraint);
            }
        };
        tomcat.addAdditionalTomcatConnectors(httpConnector());
        return tomcat;

    }
    @Bean
    public Connector httpConnector() {
        Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
        //将http的访问端口重定向到https的访问端口
        
        connector.setScheme("http");
        //http的访问端口
        connector.setPort(80);
        connector.setSecure(false);
        //https的访问端口 就是ssl证书的端口  默认是443
        connector.setRedirectPort(443);
        return connector;
    }

    @Override
    public void run(String... arg0) throws Exception {
        // TODO Auto-generated method stub
    }
}

这样  当http 访问的时候会自动跳转为https访问 

遇到的问题:

1.首先  在做接口测试的时候不能用网页链接拼接参数去访问  因为链接访问都是get请求  接口中有一些只允许post请求的

2.再用api测试的时候http访问需要加上query参数 https访问可以直接使用body参数

3.本地证书犹豫不被浏览器认可所以会显示为不安全  需要下载大平台证书  阿里云就有 可以免费一年

4.网上申请的ssl证书是需要绑定域名的  一个域名只允许安装一个ssl证书

5.当进入程序发送到测试环境时,api和网页链接访问是访问不了的  会提示不允许get请求  需要进入项目中按照前端页面的按钮测

  • 2
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值