Nginx,MD5和Knife4j

一、 Nginx: 項目網關與流量調度

核心原理

  • 反向代理 (Reverse Proxy):

    在Web架構中,Nginx作為系統的統一入口(API網關),接收所有外部客戶端請求。它通過解析請求的URL路徑(location指令),判斷請求的意圖,然后將請求路由到正確的內部后端微服務。這些后端服務運行在各自的端口上,不直接對公網暴露。此模式增強了系統的安全性,并為日志、監控、權限等提供了統一的管理層面。

  • 負載均衡 (Load Balancing):

    對于高流量服務,單實例存在性能瓶頸和單點故障風險。負載均衡機制通過upstream指令定義一個由多個相同服務實例組成的服務器集群。當請求被路由到此集群時,Nginx會根據預設策略(如加權輪詢)選擇一個實例處理請求。這實現了請求壓力的分攤,保證了服務的高可用性和水平擴展能力。

Nginx

upstream webservers {server 127.0.0.1:8080 weight=90;#server 127.0.0.1:8088 weight=10;
}server {listen 80;server_name localhost;location /api/ {proxy_pass http://localhost:8080/admin/;}location /user/ {proxy_pass http://webservers/user/;}
}

  1. upstream webservers { ... }

    此代碼塊定義了一個名為 webservers 的后端服務器集群,用于實現負載均衡。其中server指令定義了集群內的成員。當前配置中,127.0.0.1:8080服務器是主要的工作節點,權重為90,而127.0.0.1:8088服務器則被注釋,處于非活動狀態。

  2. location /api/ { ... }

    此代碼塊定義了針對后臺管理端請求的路由規則。它匹配所有以/api/開頭的URL,并通過proxy_pass指令,將這些請求以反向代理的方式轉發給運行在localhost:8080端口的后端管理服務。

  3. location /user/ { ... }

    此代碼塊定義了針對小程序用戶端請求的路由規則。它匹配所有以/user/開頭的URL,并通過proxy_pass指令,將請求轉發給上面定義的webservers服務器集群。Nginx會自動根據集群內服務器的權重等策略進行負載均衡。


二、 MD5: 密碼的安全存儲與驗證

核心原理

MD5是一種單向哈希函數,能將任意數據轉換為一個固定長度且不可逆的“數字指紋”。在用戶認證中,其核心價值在于避免在數據庫中存儲用戶的明文密碼,以此提升賬戶安全性。驗證過程不比較密碼原文,而是比較密碼原文經過哈希計算后的“指紋”是否與數據庫中預存的“指紋”一致。這依賴于哈希函數的確定性:相同的輸入永遠產生相同的輸出。

代碼示例 (EmployeeServiceImpl.java中的login方法)

Java

public Employee login(EmployeeLoginDTO employeeLoginDTO) {String username = employeeLoginDTO.getUsername();String password = employeeLoginDTO.getPassword();Employee employee = employeeMapper.getByUsername(username);if (employee == null) {throw new AccountNotFoundException(MessageConstant.ACCOUNT_NOT_FOUND);}password = DigestUtils.md5DigestAsHex(password.getBytes());if (!password.equals(employee.getPassword())) {throw new PasswordErrorException(MessageConstant.PASSWORD_ERROR);}if (employee.getStatus() == StatusConstant.DISABLE) {throw new AccountLockedException(MessageConstant.ACCOUNT_LOCKED);}return employee;
}

代碼解讀

  1. 首先,方法從employeeLoginDTO對象中獲取用戶在登錄時提交的明文usernamepassword

  2. 使用employeeMapper.getByUsername(username)從數據庫查詢用戶信息。此時,返回的employee對象中所包含的密碼employee.getPassword()是先前在注冊時就已經過MD5加密處理的哈希字符串。

  3. password = DigestUtils.md5DigestAsHex(password.getBytes()); 這一行是核心步驟。它調用Spring框架的工具類,將用戶本次輸入的明文密碼也進行相同的MD5哈希計算。

  4. if (!password.equals(employee.getPassword())) 這一行進行最終的驗證。它比較的是兩個MD5哈希值:一個是剛由用戶輸入計算得出的,另一個是從數據庫中讀取的。如果兩者不一致,則證明密碼錯誤。

  • 安全提醒: 盡管此方法詮釋了哈希驗證原理,但因MD5算法本身存在安全弱點,現代項目中更推薦使用BCrypt等加鹽慢哈希算法。


三、 Knife4j: API文檔的自動化生成與增強UI

核心原理

Knife4j是基于Swagger/OpenAPI規范的API文檔UI增強工具。其工作模式為**“后端代碼驅動,前端界面渲染”**:

  1. 后端生成數據: 項目中引入的SpringfoxSpringdoc庫,會掃描Java Controller代碼中的特定注解(如@ApiOperation),并在項目運行時,自動生成一份遵循OpenAPI規范的JSON格式的API結構描述文件。這實現了“代碼即文檔”,保證了文檔與實現的高度一致。

  2. 前端渲染界面: Knife4j本身提供了一套美觀且功能強大的前端UI資源。這個UI界面會請求并解析上一步生成的JSON數據,最終將其渲染成一個可交互、帶在線調試功能的Web文檔頁面,極大地提升了API文檔的可讀性和易用性。

1. 配置API掃描規則 (位于WebMvcConfiguration.java)

代碼示例

Java

@Bean
public Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("蒼穹外賣項目接口文檔").version("2.0").description("蒼穹外賣項目接口文檔").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.sky.controller")).paths(PathSelectors.any()).build();return docket;
}

代碼解讀

  • @Bean方法創建并配置了一個Docket實例,它是Swagger/Springfox的核心配置對象。

  • .apiInfo()用于設置文檔首頁的標題、版本等元數據。

  • .select()開始進行掃描配置。

  • .apis(RequestHandlerSelectors.basePackage("com.sky.controller"))是關鍵配置,它指示框架只掃描com.sky.controller這個包下的所有Controller類來生成文檔。

  • .paths(PathSelectors.any())表示對掃描到的Controller中的所有接口路徑都生成文檔。

2. 配置UI界面的訪問路徑 (位于WebMvcConfiguration.java)

代碼示例

Java

@Override
protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
}

代碼解讀

  • 此方法用于設置靜態資源映射

  • 它告訴Spring MVC框架,當瀏覽器訪問/doc.html/webjars/**這些URL時,不要去Controller里尋找處理器,而是應該去Java的classpath下的特定位置(META-INF/resources/)去尋找對應的靜態文件(HTML, CSS, JS)。Knife4j的UI界面文件就打包存放在這些路徑下。

  • 完成這兩步配置后,啟動項目并訪問http://localhost:8080/doc.html即可看到API文檔。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/89265.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/89265.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/89265.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

多態,內部類(匿名內部類),常用API(1)

多態 什么是多態? 同一個對象在不同時刻表現出來的不同形態(多種形態) 例:Cat extends Animal 第一種形態:Cat c1 new Cat(); //c1是只貓 第二種形態:Animal c2 new Cat(); //c2是個動物 &#xff08…

Qt小組件 - 7 SQL Thread Qt訪問數據庫ORM

簡介網上關于Qt訪問數據庫的資料大多使用QSqlDatabase模塊。雖然這在C中尚可接受,但在Python中使用就顯得過于繁瑣了——不僅要手動編寫SQL語句,還與Python追求簡潔的理念背道而馳。在這里寫一個基于sqlalchemy的示例,也可以使用其他的ORM庫 …

使用Gin框架構建高并發教練預約微服務:架構設計與實戰解析

項目概述 技術棧 Web框架:Gin(高性能HTTP框架)數據存儲:Redis(內存數據庫,用于高并發讀寫) 項目結構 coach-booking-service ├── main.go # 程序入口,路由初始化&am…

深入拆解Spring第二大核心思想:AOP

什么是AOP Aspect Oriented Programming(面向切面編程) 什么是面向切面編程呢? 切?就是指某?類特定問題, 所以AOP也可以理解為面向特定方法編程. 什么是面向特定方法編程呢? 比如對于"登錄校驗", 就是?類特定問題. 登錄校驗攔截器, 就是…

linux服務器stress-ng的使用

安裝方法 ? Ubuntu/Debian:sudo apt update && sudo apt install stress-ng -y? CentOS/RHEL(需EPEL源):sudo yum install epel-release -ysudo yum install stress-ng -y? 源碼編譯(適合定制化需求&#x…

探索阿里云DMS:解鎖高效數據管理新姿勢

一、阿里云 DMS 是什么 阿里云 DMS,全稱為 Data Management Service,即數據管理服務 ,是一種集數據管理、結構管理、安全管理于一體的全面數據庫服務平臺。它能夠有效地支持各類數據庫產品,包括但不限于 MySQL、SQL Server、Post…

python爬取新浪財經網站上行業板塊股票信息的代碼

在這個多行業持續高速發展的時代,科技正在改變著我們的生活。 在世界科技領域中,中國正占據越來越重要的位置。當下,每個行業都提到了區塊鏈、人工智能、大數據、5G等科技力量,強調了科技在行業咨詢與數據分析領域的重要意義。 隨…

【JAVA】監聽windows中鼠標側面鍵的按鈕按下事件

監聽windows中鼠標側面鍵的按鈕按下事件用到的包核心類使用這個類用到的包 jna-5.11.0.jar jna-platform-5.11.0.jar核心類 package sample.tt.mouse;import com.sun.jna.Pointer; import com.sun.jna.platform.win32.*; import com.sun.jna.platform.win32.WinDef.HMODULE; …

Redis突發寫入阻斷?解析“MISCONF Redis is configured to save RDB…“故障處理

當你的Redis服務器突然拒絕寫入并拋出 MISCONF Redis is configured to save RDB snapshots... 錯誤時,別慌!這是Redis的數據安全保護機制在發揮作用。本文帶你深度解析故障根因,并提供完整的解決方案。🔥 故障現象還原 客戶端&am…

產品更新丨谷云科技 iPaaS 集成平臺 V7.6 版本發布

六月,谷云科技iPaaS集成平臺更新了V7.6版本。這次更新中我們著重對API網關、API編排、組織管理權限、API監控等功能進行了增強以及優化,一起來看看有什么新變化吧! 網關、監控、編排、組織權限全方位升級 1.API網關 錯誤碼預警,可…

圖像處理中的模板匹配:原理與實現

目錄 一、什么是模板匹配? 二、模板匹配的匹配方法 1. 平方差匹配(cv2.TM_SQDIFF) 2. 歸一化平方差匹配(cv2.TM_SQDIFF_NORMED) 3. 相關匹配(cv2.TM_CCORR) 4. 歸一化相關匹配&#xff08…

高性能架構模式——高性能NoSQL

目錄 一、關系數據庫的缺點二、常見的 NoSQL 方案分 類2.1、K-V 存儲2.2、文檔數據庫2.3、列式數據庫2.4、全文搜索引擎三、高性能 NoSQL 方案的典型特征和應用場景3.1、K-V 存儲典型特征和應用場景3.2、文檔數據庫典型特征和應用場景3.1.1、文檔數據庫的 no-schema 特性的優勢…

正確選擇光伏方案設計軟件:人力成本優化的關鍵一步

在競爭激烈的市場環境中,企業無不追求效率提升與成本控制。設計環節作為產品開發的核心流程,其效率高低直接影響整體項目進度與資源消耗。錯誤的設計軟件選擇如同在信息高速公路上設置路障——它不會阻止前行,卻會讓每一次溝通、每一次修改都…

Git問題排查與故障解決詳解

前言 在使用Git進行版本控制的過程中,開發者常常會遇到各種各樣的問題和錯誤。本文將詳細介紹常見的Git問題及其解決方法,幫助開發者快速定位和解決問題,避免在開發過程中浪費時間。 1. 基礎錯誤與解決 1.1 身份配置問題 問題&#xff1a…

使用Xinference部署語音模型實現文本轉語音:完整指南

文章目錄引言環境準備1. 安裝Xinference2. 啟動Xinference服務3. 部署語音模型Python實現文本轉語音關鍵參數說明應用場景性能優化建議常見問題解決結語引言 文本轉語音(Text-to-Speech, TTS)技術在智能助手、有聲讀物、語音導航等應用中扮演著重要角色…

【C#】實體類定義的是long和值識別到的是Int64,實體類反射容易出現Object does not match target type

🌹歡迎來到《小5講堂》🌹 🌹這是《C#》系列文章,每篇文章將以博主理解的角度展開講解。🌹 🌹溫馨提示:博主能力有限,理解水平有限,若有不對之處望指正!&#…

C#獲取當前系統賬戶是否為管理員賬戶

傳統方式:WindowsPrincipal winPrincipal new WindowsPrincipal(WindowsIdentity.GetCurrent()); bool admin winPrincipal.IsInRole(WindowsBuiltInRole.Administrator);這種方式雖然是最常用的檢測管理員權限的方法,但是有個致命的缺陷,就…

【c++深入系列】:萬字詳解list(附模擬實現的list源碼)

🔥 本文專欄:c 🌸作者主頁:努力努力再努力wz 💪 今日博客勵志語錄: 當你覺得累的時候,說明你在走上坡路 ★★★ 本文前置知識: 模版 那么在之前的學習中,我們已經學習了…

PandaWiki與GitBook深度對比:AI時代的知識管理工具,選誰好?

在當今信息爆炸的時代,知識管理工具已成為個人學習、團隊協作和企業文檔管理的必需品。PandaWik作為AI時代迅速崛起的廣受歡迎知識管理平臺,代表了新一代AI驅動的知識庫系統。本文將從功能特性、技術架構、適用場景等多個維度進行全面對比分析。產品定位…

清除 Android 手機 SIM 卡數據的4 種簡單方法

SIM 卡存儲了聯系人、短信和通話記錄等信息。在更換新 SIM 卡之前,徹底清除舊卡上的所有個人數據(如 SIM 卡聯系人、短信、通話記錄和手機號碼)非常重要。要在 Android 手機上清除 SIM 卡內存,您可以參考以下方法。但在開始之前&a…