Spring项目HTTPS

简介

SSL(Secure Sockets Layer)是为网络通信提供安全及数据完整性的一种安全协议,SSL在网络传输层对网络进行加密。SSL协议可以分为两层:SSL记录协议,为高层协议提供数据封装、压缩、加密,建立在TCP基础上;SSL握手协议建立在SSL记录协议之上,用于在实际数据开始传输之前,通信双方进行身份认证、协商加密算法、交换加密秘钥。

操作流程

生成证书

jdk自带的工具中,keytool是一个证书管理工具,可以用来生成自签名的证书。

keytool -genkey -alias tomcat
keytool -genkey -alias tomcat -keyalg "RSA" -keystore "test.keystore" 
keytool -list -keystore test.keystore
keytool -delete -alias tomcat

运行完成后会在当前==用户目录 官网:www.fhadmin.org ==下声称.keystore文件,将对应的文件copy到resources目录下。

spring boot配置

server.ssl.key-store = .keystore
server.ssl.key-store-password = 123456
server.ssl.keyStroreType = JKS
server.ssl.keyAlias

http以及https支持

@Bean 官网:www.fhadmin.org
public EmbeddedServletContainerFactory servletContainer() {
    TomcatEmbeddedServletContainerFactory tomcat = new TomcatEmbeddedServletContainerFactory();
    tomcat.addAdditionalTomcatConnectors(createSslConnector());
    return tomcat;
}

private Connector createSslConnector() {
    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
    try {
        File keystore = new ClassPathResource("keystore").getFile();
        File truststore = new ClassPathResource("keystore").getFile();
        connector.setScheme("https");
        connector.setSecure(true);
        connector.setPort(8443);
        protocol.setSSLEnabled(true);
        protocol.setKeystoreFile(keystore.getAbsolutePath());
        protocol.setKeystorePass("changeit");
        protocol.setTruststoreFile(truststore.getAbsolutePath());
        protocol.setTruststorePass("changeit");
        protocol.setKeyAlias("apitester");
        return connector;
    }
    catch (IOException ex) {
        throw new IllegalStateException("can't access keystore: [" + "keystore"
                + "] or truststore: [" + "keystore" + "]", ex);
    }
}

http协议自动转向https

@Bean 官网:www.fhadmin.org
  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;
  }

  private Connector initiateHttpConnector() {

    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
    connector.setScheme("http");
    connector.setPort(8080);
    connector.setSecure(false);
    connector.setRedirectPort(8443);
    return connector;
  }

Q&A

开启SSL之后在浏览器中访问,可能访问到的内容为空,主要是安全证书问题。有些浏览器存在安全证书问题时不会提示,不安全访问,而直接静止访问,可以更换一个浏览器试试。

Spring项目的创建可以通过使用IntelliJ IDEA等开发工具来完成。首先,你需要在IDEA中创建一个新的项目。在创建项目的过程中,你可以选择使用Spring Initializr来生成一个基本的Spring项目结构。这个工具可以帮助你快速创建一个包含必要依赖和配置的Spring项目。 在创建项目后,你可以在项目的配置文件中定义和配置Spring的相关组件和功能。通常,Spring项目的配置文件是一个XML文件,其中包含了Spring容器的配置信息。你可以使用<beans>元素来定义Spring的bean对象和它们之间的依赖关系。例如,你可以使用<bean>元素来定义一个类的实例,并指定它的属性值和依赖关系。 在项目中使用Spring的bean对象时,你可以通过Spring容器来获取它们的实例。Spring容器会负责创建和管理这些对象,你只需要在需要使用它们的地方通过容器获取即可。你可以使用ApplicationContext接口来获取Spring容器的实例,并使用getBean()方法来获取具体的bean对象。 总结起来,创建一个Spring项目包括以下几个步骤: 1. 使用开发工具创建一个新的项目,可以选择使用Spring Initializr来生成基本的项目结构。 2. 在项目的配置文件中定义和配置Spring的相关组件和功能,通常使用XML格式的配置文件。 3. 使用Spring容器来获取和管理bean对象的实例,可以通过ApplicationContext接口来获取容器实例,并使用getBean()方法来获取具体的bean对象。 希望这个回答对你有帮助!\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Spring入门(一):创建Spring项目](https://blog.csdn.net/LIU18612105538/article/details/101644076)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [spring项目的创建](https://blog.csdn.net/xhhhx_/article/details/125548279)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值