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/zh-tw/n/316321.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HXEYO的頭像HXEYO
上一篇 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

發表回復

登錄後才能評論