SpringBoot Https实现

一、前言

在互联网时代,隐私和安全问题愈发突出,SpringBoot Https实现正是应对这一趋势的重要解决方案。通过本文,你将学到如下内容:

1. Https与Http的区别

2. Https的作用及优缺点

3. SpringBoot Https实现方法和步骤

二、Https介绍

Https(Hyper Text Transfer Protocol over Secure Socket Layer)即在HTTP上添加SSL层,将HTTP包装起来,从而保护数据传输过程中的隐私和安全,实现了加密通信和身份认证。

相较于Http,Https的优点有:

1. 数据传输过程中的隐私和安全更加可靠;

2. 可以防止中间人攻击(Man-in-the-Middle Attack);

3. 能够校验证书,确保服务器与客户端的真实性和一致性;

4. 能够对SEO产生积极影响。

三、SpringBoot Https实现步骤

1. 生成证书和私钥

使用Java提供的keytool工具生成证书和私钥。示例命令:

   keytool -genkeypair -alias tomcat \
   -keyalg RSA -keysize 2048 \
   -keystore your_keystore_name.jks \
   -validity 3650

其中,tomcat代表别名,keysize代表密钥长度,keystore代表证书存储路径。根据实际情况进行修改即可。

2. 配置application.properties

添加以下内容:

   server.port=443
   server.ssl.key-store=classpath:your_keystore_name.jks
   server.ssl.key-store-password=your_keystore_password
   server.ssl.keyStoreType=JKS
   server.ssl.keyAlias=tomcat

其中,port指定了服务器的端口号为443,key-store-path指定生成的证书路径,key-store-password指定证书密码,key-store-type指定证书类型,keyAlias指定了生成证书时的别名。

3. 修改启动类

在启动类中添加@EnableAutoConfiguration注解,并修改configure方法为下列代码:

   @Override
   protected void configure(HttpSecurity http) throws Exception {
       http.authorizeRequests().anyRequest().permitAll()
               .and().csrf().disable()
               .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
               .and().httpBasic().disable()
               .headers().cacheControl().disable();
   }

在这里,我们允许所有请求都被通过,每次登录的session不需要管理,禁用了HTTP的基本认证验证,并禁用了响应头信息的缓存控制。

四、开启Https验证

通过以上配置后,启动SpringBoot项目默认为http,在访问https时会提示Http请求无法访问。我们还需要为SpringBoot添加Https支持,使请求能够被Https处理。

在启动类Application的main方法中添加如下内容即可启用Https验证:

   Ssl ssl = new Ssl();
   ssl.setKeyStore("classpath:your_keystore_name.jks");
   ssl.setKeyStorePassword("your_keystore_password");
   ssl.setKeyAlias("tomcat");
   TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
   tomcat.addAdditionalTomcatConnectors(createSslConnector());
   tomcat.setSsl(ssl);
   return tomcat;
}

private Connector createSslConnector() {
   Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
   Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
   try {
       File truststore = new ClassPathResource("your_keystore_name.jks").getFile();
       connector.setScheme("https");
       connector.setSecure(true);
       connector.setPort(8443);
       protocol.setSSLEnabled(true);
       protocol.setKeystoreFile(truststore.getAbsolutePath());
       protocol.setKeystorePass("your_keystore_password");
       protocol.setKeyAlias("tomcat");
       return connector;
   }
   catch (IOException ex) {
       throw new IllegalStateException("can't access truststore: " + ex);
   }
}

五、完整代码示例

以下为完整的SpringBoot Https实现代码示例:

@SpringBootApplication
public class Application extends SpringBootServletInitializer {
   public static void main(String[] args) {
       SpringApplication.run(Application.class, args);
   }
   @Override
   protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
       Ssl ssl = new Ssl();
       ssl.setKeyStore("classpath:your_keystore_name.jks");
       ssl.setKeyStorePassword("your_keystore_password");
       ssl.setKeyAlias("tomcat");
       TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory();
       tomcat.addAdditionalTomcatConnectors(createSslConnector());
       tomcat.setSsl(ssl);
       return builder.sources(Application.class).web(WebApplicationType.SERVLET)
               .bannerMode(Banner.Mode.OFF)
               .properties("spring.config.additional-location=classpath:/application-production.properties")
               .properties("spring.output.ansi.enabled=ALWAYS")
               .properties("server.port=80")
               .properties("server.http.port=80")
               .properties("server.https.port=443")
               .properties("server.ssl.enabled=true")
               .properties("server.ssl.client-auth=none")
               .properties("server.ssl.key-store=classpath:your_keystore_name.jks")
               .properties("server.ssl.key-store-password=your_keystore_password")
               .properties("server.ssl.keyStoreType=JKS")
               .properties("server.ssl.keyAlias=tomcat")
               .serverCustomizers((TomcatServletWebServerFactory factory) -> {
                   factory.addConnectorCustomizers((connector) -> {
                       connector.setProperty("relaxedQueryChars", "|{}[]");
                       connector.setParseBodyMethods("POST,PUT,DELETE");
                       connector.setProperty("relaxedPathChars", "_[]{}|");
                   });
               });
   }
   private Connector createSslConnector() {
       Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");
       Http11NioProtocol protocol = (Http11NioProtocol) connector.getProtocolHandler();
       try {
           File truststore = new ClassPathResource("your_keystore_name.jks").getFile();
           connector.setScheme("https");
           connector.setSecure(true);
           connector.setPort(443);
           protocol.setSSLEnabled(true);
           protocol.setKeystoreFile(truststore.getAbsolutePath());
           protocol.setKeystorePass("your_keystore_password");
           protocol.setKeyAlias("tomcat");
           return connector;
       }
       catch (IOException ex) {
           throw new IllegalStateException("can't access truststore: " + ex);
       }
   }
}

六、小结

通过本文,我们了解到Https的优点和作用,并详细介绍了SpringBoot中实现Https的步骤和代码示例。对于项目安全和隐私保护的需求,开启Https是一种可行的解决方案。

原创文章,作者:HXEYO,如若转载,请注明出处:https://www.506064.com/n/316321.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
HXEYOHXEYO
上一篇 2025-01-09 12:14
下一篇 2025-01-09 12:14

相关推荐

  • 从ga角度解读springboot

    springboot作为目前广受欢迎的Java开发框架,其中的ga机制在整个开发过程中起着至关重要的作用。 一、ga是什么 ga即Group Artifacts的缩写,它是Mave…

    编程 2025-04-29
  • SpringBoot Get方式请求传参用法介绍

    本文将从以下多个方面对SpringBoot Get方式请求传参做详细的阐述,包括URL传参、路径传参、请求头传参、请求体传参等,帮助读者更加深入地了解Get请求方式下传参的相关知识…

    编程 2025-04-27
  • SpringBoot如何设置不输出Info日志

    本篇文章将带您了解如何在SpringBoot项目中关闭Info级别日志输出。 一、为什么要关闭Info日志 在开发中,我们经常会使用Log4j、Logback等框架来输出日志信息,…

    编程 2025-04-27
  • HTTPs请求URL里的参数会加密吗?

    是的,HTTPS请求URL里的参数会加密。HTTPS是HTTP协议的加密版本,在传输数据时,使用了SSL/TLS协议对传输内容进行加密,保证数据在传输过程中不会被篡改、窃取。下面我…

    编程 2025-04-27
  • 解决springboot中scanBasePackages无法读取子包的问题

    在使用springboot搭建项目时,可能会遇到scanBasePackages无法读取子包的问题。本文将从几个方面详细阐述如何解决这个问题。 一、问题描述 在使用Springbo…

    编程 2025-04-25
  • SpringBoot请求参数绑定

    解答:SpringBoot请求参数绑定是指将HTTP请求中的参数与Controller方法的参数绑定起来,使得参数的传递变得简单和方便。下面我们将从多个方面对SpringBoot请…

    编程 2025-04-25
  • SpringBoot文件上传详解

    一、前言 随着互联网的发展,文件上传成为了必备的功能之一,而SpringBoot作为目前最流行的开发框架之一,为文件上传提供了便捷而强大的解决方案。 二、使用multipart/f…

    编程 2025-04-24
  • 使用SpringBoot开发高效的Web服务应用

    一、快速入门 SpringBoot可以让你更快速地搭建Web应用,它为开发者提供了许多使用时省去了很多配置代码的便利。在这里,我们将通过一个简单的示例来介绍如何使用SpringBo…

    编程 2025-04-24
  • 使用SpringBoot连接MySQL数据库

    SpringBoot是一个用于构建基于Spring框架的应用程序的快速开发工具,它提供了许多函数和库,使开发人员能够快速构建应用程序并将其部署到云中。同时,MySQL是一个流行的关…

    编程 2025-04-24
  • Nacos SpringBoot版本详解

    一、Nacos简介 Nacos是一个开源的分布式配置管理和服务发现平台,为微服务架构提供了基础设施支持。它可以帮助开发人员解决微服务架构中的服务发现、服务配置、服务元数据管理和流量…

    编程 2025-04-23

发表回复

登录后才能评论