微服務概述-7

Shiro 框架

Shiro 是一個用于 Java 應用程序的安全框架。它提供了身份驗證、授權、加密和會話管理等功能,可以幫助開發人員構建安全可靠的應用程序。

Java 中針對權限管理常見的有 2 個著名的框架:spring security 和 shiro

shiro 基本概念

  • credentials 資格證書

  • Principal 當事人

  • Authentication 認證

  • Authorization 授權

Shiro 工作原理

Shiro 的工作原理主要包括身份驗證和授權兩個方面。

在身份驗證方面,Shiro 提供了一種簡單的方式來驗證用戶的身份。它可以通過用戶名和密碼、輕量目錄訪問協議 LDAP、OAuth 等多種方式進行身份驗證。當用戶提供身份憑證后,Shiro 會驗證憑證的有效性,并返回驗證結果。

在授權方面,Shiro 提供了一種靈活的授權機制。開發人員可以定義角色和權限,并將其與用戶關聯起來。當用戶嘗試進行某個操作時,Shiro 會根據用戶的角色和權限來判斷是否允許該操作。

Shiro 還提供了會話管理功能,可以跟蹤和管理用戶的會話狀態。它支持將會話信息存儲在內存、數據庫或其他存儲介質中,并提供了一些常見的會話管理操作,如創建、銷毀、過期等。

總的來說,Shiro 的工作原理是通過身份驗證來確認用戶的身份,并通過授權機制來管理用戶的角色和權限,從而確保應用程序的安全性和可靠性。

身份認證是判斷一個用戶是否為合法用戶的處理過程。最常用的簡單身份認證方式是系統通過核對用戶輸入的用戶名和口令,看其是否與系統中存儲的該用戶的用戶名和口令一致,來判斷用戶身份是否正確。對于采用指紋等系統,則出示指紋;對于硬件 Key 等刷卡系統,則需要刷卡。

在這里插入圖片描述

授權就是訪問控制,控制誰能訪問哪些資源。主體進行身份認證后需要分配權限方可訪問系統的資源,對于某些資源沒有權限是無法訪問的

在這里插入圖片描述

shiro 運行時異常

  • AuthenticationException 異常是 Shiro 在登錄認證過程中,認證失敗需要拋出的異常

  • CredentitalsException 憑證異常

  • IncorrectCredentialsException 不正確的憑證

  • ExpiredCredentialsException 憑證過期

  • AccountException 賬號異常

  • ConcurrentAccessException 并發訪問異常(多個用戶同時登錄時拋出)

  • UnknownAccountException 未知的賬號

  • ExcessiveAttemptsException 認證次數超過限制

  • DisabledAccountException 禁用的賬號

  • LockedAccountException 賬號被鎖定

  • pportedTokenException 使用了不支持的 Token

  • AuthorizationException 鑒權操作異常

  • UnauthorizedException: 拋出以指示請求的操作或對請求的資源的訪問是不允許的

  • UnanthenticatedException:當尚未完成成功認證時,嘗試執行授權操作時引發異常

shiro 核心組件

  • Authentication 身份認證/登錄,驗證用戶是不是擁有相應的身份。

  • Authorization 授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具有某個權限。

  • SessionManagement 對用戶的會話信息進行管理,使 Session 不再僅限于 JavaEE 應用,同時擴展了 Session數據的存儲途徑及緩存方式,更易于實現 Session 數據的集群共享

  • Cryptography 加密,保護數據的安全性,以簡潔的 API 提供常用的加密算法和數據摘要算法。

在這里插入圖片描述

shiro 選用:

1、使用 shiro 可以非常快速的完成認證、授權等功能的開發,降低系統成本

2、較之 SpringSecurity,Shiro 在保持強大功能的同時,在簡單性和靈活性方面擁有較為明顯的優勢

Kaptcha

Kaptcha 是一個用于生成和驗證驗證碼的 Java 庫,提供了豐富的生成和驗證功能,并支持自定義配置。它可以用于增加應用程序的安全性,防止機器人和惡意攻擊。

Kaptcha 可以生成各種類型的驗證碼,包括數字、字母、數字字母組合等。生成的驗證碼圖片可以以圖片流或Base64 編碼的形式輸出,方便在 Web 應用程序中使用。

在驗證碼驗證方面,Kaptcha 提供了驗證器接口,可以用于驗證用戶輸入的驗證碼是否正確。開發人員可以根據需要自定義驗證邏輯,以滿足特定的業務需求。

Cookie 的使用

Cookie 是一種在 Web 開發中使用客戶端數據存儲實現跟蹤用戶狀態的機制。所謂的跟蹤用戶是指記錄用戶操作信息并隔離不同用戶數據訪問的方法,常見的用戶跟蹤方法有隱藏域、URL 重寫、客戶端跟蹤用戶 Cookie

和服務器端跟蹤用戶 Session 四種不同方式。

理論上來說關于 cookie 的大小實際上沒有明確的限制。Cookie 是由網站在用戶瀏覽器中存儲的小型文本文件,用于跟蹤用戶的活動和提供個性化的服務。然而瀏覽器對于每個域名和每個 cookie 的大小都有一些限制。大多數現代瀏覽器對于單個 cookie 的大小限制在 4KB 到 10KB 之間,例如 chrome 的限制就是 4KB。同時每個域名在瀏覽器中可以存儲的 cookie 數量也有一定限制,一般在幾十到幾百個之間。

需要注意的是,這些限制可能因不同的瀏覽器和版本而有所不同。此外雖然 cookie 的大小限制較小,但網站可以通過將數據存儲在服務器上,并在 cookie 中使用標識符來處理更大量的數據。 總的來說,雖然 cookie的大小有一定限制,但對于大多數常見的用途和數據跟蹤來說,這些限制通常是足夠的。如果有特定的需求,可能需要考慮其他的數據存儲方式。

setMaxAge(int expiry) 正值表示 cookie 將在經過該值表示的秒數后過期,負值意味著 cookie 不會被持久存儲,將在 Web 瀏覽器退出時刪除,默認是-1,0 值表示馬上刪除 cookie。

setPath(String)指定路徑下的請求才會傳遞該 cookie 數據Cookie 中的中文亂碼可以使用 URLDecoder.decode(value,“UTF-8”)解決

Session 的使用

Session 是一種在 Web 開發中用于跟蹤用戶狀態的機制。它通過在服務器上存儲用戶數據,并為每個用戶分配一個唯一的標識符來實現。 在使用 Session 時,服務器會為每個用戶創建一個唯一的 Session ID,并將該 ID

存儲在用戶的瀏覽器中的 Cookie 中。當用戶發送請求時,服務器會根據 Session ID 來檢索和存儲與該用戶相關的數據。這使得服務器能夠跟蹤用戶的狀態和信息,例如登錄狀態、購物車內容等。Session 的使用有四方面需要注意:

  1. 安全性:由于 Session ID 存儲在用戶的 Cookie 中,需要采取適當的安全措施來保護 Session 數據。這包括

使用加密傳輸、限制 Session ID 的有效期等。

  1. 存儲容量:Session 數據存儲在服務器上,因此需要考慮服務器的存儲容量和性能。過多或過大的 Session數據可能會對服務器造成壓力。
  2. 生命周期:Session 可以有不同的生命周期設置,例如在用戶關閉瀏覽器后立即過期,或者在一定時間段內保持活動狀態。開發人員需要根據應用需求來配置 Session 的生命周期。
  3. 分布式環境:在分布式環境中,需要確保 Session 數據在不同服務器之間的共享和同步,以便用戶在不同服務器間切換時能夠保持會話狀態。

server.servlet.session.timeout=30m 表示 Session 將在 30 分鐘后超時

SpringSession

在傳統單機 web 應用中,用戶的 session 都是由容器管理。瀏覽器使用 cookie 中記錄 sessionId,容器根據sessionId 判斷用戶是否存在會話 session。限制是 session 存儲在 web 容器中,被單臺服務器容器管理。如果需要實現 session 共享的方式有 5 種:1、通過 nginx 的 ip_hash 負載均衡策略根據 ip 將請求分配到對應的服務器。2、基于關系型數據庫存儲共享數據。3、基于 cookie 客戶端數據存儲。4、某些服務器內置的有 session

復制域功能。5、可以基于 NoSQL 數據庫系統實現

Spring Session 是一個用于在分布式環境中管理和跟蹤用戶會話的框架。它提供了多種用戶會話存儲的實現方式,支持會話共享和跨域請求,具有良好的擴展性和自定義能力。主要是依賴于 SessionRepositoryFilter 實現,它就是Servlet 規范中 Filter 的實現,用來切換HttpSession 至Spring Session,重新定義包裝 HttpServletRequest和 HttpServletResponse

在這里插入圖片描述

使用 Spring Session 功能

  • 創建和管理會話:Spring Session 可以創建和管理用戶會話。它提供了 API 來創建新會話、獲取當前會話、設置會話屬性等。

  • 共享會話數據:在分布式環境中,Spring Session 可以將會話數據存儲在共享的存儲介質中,以便不同的服務器可以訪問和共享相同的會話數據。

  • 跨域請求支持:Spring Session 提供了跨域請求支持,使得在多個域名或子域名下共享會話變得更加容易。

  • 擴展性和自定義:Spring Session 具有良好的擴展性,可以根據需要自定義會話存儲、會話管理和會話策略等。

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

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

相關文章

機器學習筆記 - 基于C++的??深度學習 二、實現卷積運算

一、卷積 卷積是信號處理領域的老朋友。最初的定義如下 在機器學習術語中: I(…)通常稱為輸入 K(…)作為內核,并且 F(…)作為給定K的I(x)的特征圖。 慮多維離散域,我們可以將積分轉換為以下求和 對于二維數字圖像,我們可以將其重寫為: <

編程練習(1)

目錄 一.選擇題 第一題&#xff1a; 第二題&#xff1a; 第三題&#xff1a; 第四題&#xff1a; 第五題&#xff1a; ?編輯 二.編程題 第一題&#xff1a; 第二題&#xff1a; 1.暴力方法&#xff1a; 2.數組法&#xff1a; 一.選擇題 第一題&#xff1a; 解析&…

【vue】簡潔優雅的火花線、趨勢線

來由 在github發現個好看易用的vue趨勢線組件&#xff0c;特此記錄。 效果 趨勢圖生成后效果如上&#xff0c;線條為漸變色&#xff0c;可設置是否平滑。具體線條走勢&#xff0c;根據數據動態生成。 使用 安裝 npm i vuetrend -S 引入 import Vue from "vue"…

MySQL性能分析之慢查詢日志查看

一、背景 MySQL的慢查詢日志是MySQL提供的一種日志記錄,他用來記錄在MySQL中響應的時間超過閾值的語句,具體指運行時間超過long_query_time(默認是10秒)值的SQL,會被記錄到慢查詢日志中。 慢查詢日志一般用于性能分析時開啟,收集慢SQL然后通過explain進行全面分析,一…

時序預測 | MATLAB實現WOA-CNN-BiLSTM鯨魚算法優化卷積雙向長短期記憶神經網絡時間序列預測

時序預測 | MATLAB實現WOA-CNN-BiLSTM鯨魚算法優化卷積雙向長短期記憶神經網絡時間序列預測 目錄 時序預測 | MATLAB實現WOA-CNN-BiLSTM鯨魚算法優化卷積雙向長短期記憶神經網絡時間序列預測預測效果基本介紹程序設計學習總結參考資料 預測效果 基本介紹 時序預測 | MATLAB實現…

Python案例|Pandas正則表達式

字符串的處理在數據清洗中占比很大。也就是說,很多不規則的數據處理都是在對字符串進行處理。Excel提供了拆分、提取、查找和替換等對字符串處理的技術。在Pandas中同樣提供了這些功能,并且在Pandas中還有正則表達式技術的加持,讓其字符串處理能力更加強大。 01、正則 正則就是…

TypeScript相關面試題

typeScript 1.什么是TypeScript?是什么&#xff1f;特性&#xff1f;區別&#xff1f; 2.TypeScript數據類型&#xff1f;3.說說你對 TypeScript 中枚舉類型的理解&#xff1f;應用場景&#xff1f;4.說說你對 TypeScript 中接口的理解&#xff1f;應用場景&#xff1f;使用方…

docker中的jenkins之流水線構建

docker中的jenkins之流水線構建項目 1、用node這種方式&#xff08;因為我用pipeline方式一直不執行&#xff0c;不知道為什么&#xff09; 2、創建項目 創建兩個參數&#xff0c;一個是宿主端口號&#xff0c;一個是docker中的端口號 3、使用git項目中的Jenkinsfile 4、編寫…

【AGI】世界首次實現室溫超導LK-99

論文&#xff1a;The First Room-Temperature Ambient-Pressure Superconductor GPT論文總結&#xff1a; 根據所提供的信息&#xff0c;這篇論文報道了一種在室溫和常壓下工作的室溫超導體LK-99。LK-99的超導性是通過微小的結構畸變引起的&#xff0c;而不是通過溫度和壓力等外…

09 - 連續的多個commit整理成1個

查看所有文章鏈接&#xff1a;&#xff08;更新中&#xff09;GIT常用場景- 目錄 文章目錄 將連續的多個commit整理成1個 將連續的多個commit整理成1個 將anranxiaohunzhang和xianglongshibazhang合并起來&#xff08;將anranxiaohunzhang合并到降龍十八掌上&#xff0c;生成新…

java GC日志分析示例

分析 Java 的 GC 日志可以幫助您了解應用程序的垃圾回收情況&#xff0c;從而檢測內存泄漏、性能問題以及優化內存使用。下面是一些詳細的步驟和示例來分析 Java 的 GC 日志。 假設您有一個 Java 應用程序運行的 GC 日志文件&#xff0c;我們將使用以下示例日志進行解釋&#…

干翻Dubbo系列第十篇:Dubbo體系中ProtoBuf序列化方式詳解

文章說明 本文內容整理自《孫哥說Dubbo系列視頻課程》&#xff0c;孫帥老師課程細致、全面、深入、性價比極高。B站搜孫帥suns可以找到對應的試聽視頻&#xff0c;或者直接添加老師微信號suns45與他直接聯系 一&#xff1a;序列化概念 補充說明&#xff1a; Kyro和Fst這兩種…

設計模式-面試常問

1.單例模式 保證系統中&#xff0c;一個類&#xff0c;只有一個實例&#xff0c;并且提供對外訪問。 優點&#xff1a;只有一個對象&#xff0c;可以節省資源。適合頻繁創建銷毀對象的場景。 實現&#xff1a;要用到static&#xff0c;靜態私有對象。暴露單例的靜態方法。 &…

docker 學習--03 環境安裝(本人使用的win10 Linux也是在win10下模擬)

docker 學習–03 環境安裝&#xff08;本人使用的win10 Linux也是在win10下模擬&#xff09; docker 學習-- 01 基礎知識 docker 學習-- 02 常用命令 文章目錄 docker 學習--03 環境安裝&#xff08;本人使用的win10 Linux也是在win10下模擬&#xff09;[TOC](文章目錄) 1. wi…

【數學建模】邏輯回歸算法(Logistic Resgression)

邏輯回歸算法 簡介邏輯回歸與條件概率繪制sigmoid函數 簡介 邏輯回歸算法是一種簡單但功能強大的二元線性分類算法。需要注意的是&#xff0c;盡管"邏輯回歸"名字帶有“回歸”二字&#xff0c;但邏輯回歸是一個分類算法&#xff0c;而不是回歸算法。 我認為&#xff…

冉冉升起的星火,再度升級迎來2.0時代!

文章目錄 前言權威性評測結果 星火大模型多模態功能插件功能簡歷生成文檔問答PPT生成 代碼能力 福利 前言 前幾天從技術群里看到大家都在談論《人工智能大模型體驗報告2.0》里邊的內容&#xff0c;抱著好奇和學習的態度把報告看了一遍。看完之后瞬間被里邊提到的科大訊飛的星火…

2008-2020年全國各省綠色金融發展指數(含原始數據)

2008-2020年全國各省綠色金融發展指數&#xff08;含原始數據&#xff09; 1、時間&#xff1a;2008-2020年 2、范圍&#xff1a;30個省市 不含西藏 3、來源&#xff1a;原始數據整理自csmar、eps、wind等數據庫 4、原始數據指標&#xff1a; A股上市環保企業新增銀行貸款…

企業服務器數據庫遭到malox勒索病毒攻擊后如何解決,勒索病毒解密

網絡技術的發展不僅為企業帶來了更高的效率&#xff0c;還為企業帶來信息安全威脅&#xff0c;其中較為常見的就是勒索病毒攻擊。近期&#xff0c;我們公司收到很多企業的求助&#xff0c;企業的服務器數據庫遭到了malox勒索病毒攻擊&#xff0c;導致系統內部的許多重要數據被加…

HCIP VRRP技術

一、VRRP概述 VRRP&#xff08;Virtual Router Pedundancy Protocol&#xff09;虛擬路由器冗余協議&#xff0c;既能夠實現網關的備份&#xff0c;又能夠解決多個網關之間互相沖突的問題&#xff0c;從而提高網絡可靠性。 局域網中的用戶的終端通常采用配置一個默認網關的形…

【uniapp】 軟鍵盤彈出后fixed定位被頂上去問題

問題描述 當手機設計的導航欄為fixed定位上去時&#xff0c;輸入框獲取焦點就會把頂部自定義的導航欄頂到上面去&#xff0c;如下圖所示 解決辦法 輸入框設置 :adjust-position“false” <input type"text" :adjust-position"false" focus"i…