Shiro框架

入門概述

1 shiro是什么?

Apache Shiro 是一個功能強大且易于使用的 Java 安全(權限)框架。Shiro 可以完成:認證、授權、加密、會話管理、與 Web 集成、緩存 等。借助 Shiro 您可以快速輕松地保護任何應用程序——從最小的移動應用程序到最大的 Web 和企業應用程序。

簡單來說,shiro是一個java的安全(權限)框架。

2 為什么要用shiro?

① 易于使用:使用 Shiro 構建系統安全框架非常簡單。就算第一次接觸也可以快速掌握。

② 全面:Shiro 包含系統安全框架需要的功能,滿足安全需求的“一站式服務”。

③ 靈活:Shiro 可以在任何應用程序環境中工作。雖然它可以在 Web、EJB 和 IoC 環境中工作,但不需要依賴它們。Shiro 也沒有強制要求任何規范,甚至沒有很多依賴項。

④ 強力支持 Web:Shiro 具有出色的 Web 應用程序支持,可以基于應用程序 URL 和 Web 協議(例如 REST)創建靈活的安全策略,同時還提供一組 JSP 庫來控制頁面輸出。

⑤ 兼容性強:Shiro 的設計模式使其易于與其他框架和應用程序集成。Shiro 與 Spring、Grails、Wicket、Tapestry、Mule、Apache Camel、Vaadin 等框架無縫集成。

⑥ 社區支持:Shiro 是 Apache 軟件基金會的一個開源項目,有完備的社區支持,文檔支持。如果需要,像 Katasoft 這樣的商業公司也會提供專業的支持和服務

3 Shiro和SpringSecurity的區別?

① Spring Security 基于 Spring 開發,項目若使用 Spring 作為基礎,配合 Spring Security 做權限更加方便,而 Shiro 需要和 Spring 進行整合開發;

② Spring Security 功能比 Shiro 更加豐富些,例如安全維護方面;

③ Spring Security 社區資源相對比 Shiro 更加豐富;

④ Shiro 的配置和使用比較簡單,Spring Security 上手復雜些;

⑤ Shiro 依賴性低,不需要任何框架和容器,可以獨立運行.Spring Security 依賴 Spring 容器;

⑥ shiro 不僅僅可以使用在 web 中,它可以工作在任何應用環境中。在集群會話時 Shiro 最重要的一個好處或許就是它的會話是獨立于容器的。

4 基本功能

功能相關介紹:
① Authentication:身份認證/登錄,驗證用戶是不是擁有相應的身份;

② Authorization:授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用 戶是否能進行什么操作,如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶 對某個資源是否具有某個權限;

③ Session Manager:會話管理,即用戶登錄后就是一次會話,在沒有退出之前,它的 所有 信息都在會話中;會話可以是普通 JavaSE 環境,也可以是 Web 環境的;

④ Cryptography:加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;

⑤ Web Support:Web 支持,可以非常容易的集成到 Web 環境;

⑥ Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色/權限不必每次去查,這樣可 以提高效率;

⑦ Concurrency:Shiro 支持多線程應用的并發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;

⑧ Testing:提供測試支持;

⑨ Run As:允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;

⑩ Remember Me:記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了

5 原理

Shiro 架構(外部)
從外部來看 Shiro ,即從應用程序角度的來觀察如何使用Shiro 完成工作

????????任何一個需要進行安全身份校驗的對象Subject進來,ShiroSecurityManager安全管理器處使用Shiro的各種組件進行身份校驗。從Realm獲取相關需要校驗的安全數據。
Shiro 架構

  • Subject:應用代碼直接交互的對象是 Subject,也就是說 Shiro 的對外API核心就是 Subject。Subject 代表了當前“用戶”, 這個用戶不一定是一個具體的人,與當前應用交互的任何東西都是 Subject,如網絡爬蟲, 機器人等;與 Subject 的所有交互 都會委托給 SecurityManager; Subject 其實是一個門面,SecurityManager 才是實際的執行者;
  • SecurityManager:安全管理器;即所有與安全有關的操作都會與 SecurityManager交互;且其管理著所有 Subject;可以看出它是 Shiro 的核心,它負責與 Shiro 的其他組件進行交互,它相當于 SpringMVC 中 DispatcherServlet 的角色
  • Realm:Shiro 從 Realm 獲取安全數據(如用戶、角色、權限),就是說SecurityManager 要驗證用戶身份,那么它需要從 Realm 獲取相應的用戶 進行比較以確定用戶身份是否合法;也需要從 Realm 得到用戶相應的角色/ 權限進行驗證用戶是否能進行操作;可以把 Realm 看成 DataSource

shiro架構(內部)

  • Subject:任何可以與應用交互的“用戶”;
  • SecurityManager :相當于 SpringMVC 中的 DispatcherServlet;是 Shiro 的心臟; 所有具體的交互都通過 SecurityManager 進行控制;它管理著所有 Subject、且負責進 行認證、授權、會話及緩存的管理。
  • Authenticator:負責 Subject 認證,是一個擴展點,可以自定義實現;可以使用認證策略(Authentication Strategy),即什么情況下算用戶認證通過了;
  • Authorizer:授權器、即訪問控制器,用來決定主體是否有權限進行相應的操作;即控制著用戶能訪問應用中的哪些功能;
  • Realm:可以有 1 個或多個 Realm,可以認為是安全實體數據源,即用于獲取安全實體的;可以是 JDBC 實現,也可以是內存實現等等;由用戶提供;所以一般在應用中都需要實現自己的 Realm;
  • SessionManager:管理 Session 生命周期的組件;而 Shiro 并不僅僅可以用在 Web環境,也可以用在如普通的 JavaSE 環境
  • CacheManager:緩存控制器,來管理如用戶、角色、權限等的緩存的;因為這些數據 基本上很少改變,放到緩存中后可以提高訪問的性能
  • Cryptography:密碼模塊,Shiro 提高了一些常見的加密組件用于如密碼加密/解密。

基本使用

1.環境搭建

引入pom依賴:

<dependencies><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.9.0</version></dependency><dependency><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId><version>1.2</version></dependency>
</dependencies>

說明:Shiro獲取權限相關信息可以通過數據庫獲取,也可以通過ini配置文件獲取

這里演示從ini文件中獲取。

  • 在resources目錄下創建ini文件

注:這里等號左邊的(如:zhangsan),就代表用戶名。等號右邊的(z3)就代表對應的密碼。

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

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

相關文章

計算機網絡網絡層復習題1

一. 單選題&#xff08;共27題&#xff09; 1. (單選題)以太網 MAC 地址、IPv4 地址、IPv6 地址的地址空間大小分別是&#xff08; &#xff09;。 A. 2^48&#xff0c;2^32&#xff0c;2^128B. 2^32&#xff0c;2^32&#xff0c;2^96C. 2^16&#xff0c;2^56&#xff0c;2^6…

選對箱式壓風自救裝置提升煤礦生產效率

選對箱式壓風自救裝置提升煤礦生產效率&#xff0c;安全是煤礦穩定生產的基石&#xff0c;只有始終保持對安全的敬畏之心&#xff0c;才能確保礦區可持續發展和經濟效益的穩步提升。 150簡介 ZYJ-A型礦井壓風自救裝置是煤礦煤塵、瓦斯和二氧化碳突出礦井的實際情況&#xff0c…

淺談k8s中cni0和docker0的關系和區別

最近在復習k8s網絡方面的知識&#xff0c;查看之前學習時整理的筆記和文檔還有過往自己總結的博客之后發現一個問題&#xff0c;就是在有關flannel和calico這兩個k8s網絡插件的文章和博客中&#xff0c;會涉及到cni0和docker0這兩個網橋設備&#xff0c;但是都沒有明確說明他們…

C# WPF自制批注工具(方便標記重點和演示)

在教學和演示中&#xff0c;我們通常需要對重點進行批注&#xff0c;下載安裝第三方工具批注顯得很麻煩。本篇使用WPF開發了一個批注工具&#xff0c;工具小巧&#xff0c;功能豐富&#xff0c;非常使用日常免費使用&#xff0c;或者進行再次開發。 自制批注工具具有以下功能特…

AUTOSAR NvM模塊(五)

NvMRbCallbackSignatureAR45 改變回調函數的參數類型。 TRUE&#xff1a;根據AR44及之后版本&#xff0c;回調函數使用NvM_<Multi;Init>BlockRequestType參數類型。詳細的函數調用參數請參考回調參數。 FALSE&#xff1a;根據AR43及之前版本&#xff0c;回調函數使用S…

GPT-5 一年半后發布,對此你有何期待?

CHATGPT5&#xff1a;未來一年內的期待與挑戰 隨著人工智能技術的飛速發展&#xff0c;自然語言處理&#xff08;NLP&#xff09;領域的突破不斷涌現。在這一背景下&#xff0c;CHATGPT系列模型作為NLP領域的佼佼者&#xff0c;其每一次的更新都牽動著業界的目光。當得知CHATG…

Spring Boot中泛型參數的靈活運用:最佳實踐與性能優化

泛型是Java中一種強大的特性&#xff0c;它提供了編寫通用代碼的能力&#xff0c;使得代碼更加靈活和可復用。在Spring Boot應用程序中&#xff0c;泛型參數的靈活運用可以帶來諸多好處&#xff0c;包括增強代碼的可讀性、提高系統的健壯性以及優化系統的性能。本文將深入探討在…

Flask 數據創建時出錯

當我們在使用 Flask 創建數據時遇到錯誤&#xff0c;可能有多種原因&#xff0c;包括代碼錯誤、數據庫配置問題或依賴項錯誤。具體情況我會總結成一篇文章記錄下&#xff0c;主要是歸類總結一些常見的解決方法和調試步驟&#xff0c;幫助大家解決問題&#xff1a; 1、問題背景 …

2024.7.2 隨筆 控制內心的焦慮

文章目錄 前言2024.7.2 隨筆 控制內心的焦慮人生的新階段冒名頂替綜合征年齡焦慮、職業焦慮未來的計劃 前言 我已經記不清楚&#xff0c;好久沒有這樣寫長篇的博文&#xff0c;或者說是&#xff0c;感悟吧。起因是刷到了一個博主的視頻&#xff0c;真的治愈了我的內心&#xf…

OFDM技術概述8——FBMC

Filter bank multicarrier(FBMC&#xff0c;濾波器組多載波)&#xff0c;是一種類似于OFDM的調制方式&#xff0c;用濾波器抑制子載波的旁瓣大小&#xff0c;使用FFT/IFFT或多相濾波器實現&#xff0c;其應用于5G的主要優勢&#xff1a; 子載波信號帶限&#xff0c;帶外泄漏小…

Perl 簡介

Perl 簡介 Perl 是一種高級、通用、解釋型、動態編程語言。由 Larry Wall 于 1987 年首次發布,設計哲學是“易于修改”和“實用”。Perl 的名字源自“Practical Extraction and Reporting Language”,但也可以解釋為“Pathologically Eclectic Rubbish Lister”。Perl 被廣泛…

LiveNVR監控流媒體Onvif/RTSP用戶手冊-視頻廣場:狀態記錄、播放、回放入口、篩選在線離線、搜索

LiveNVR監控流媒體Onvif/RTSP用戶手冊-視頻廣場:狀態記錄、播放、回放入口、篩選在線離線、搜索 1、視頻廣場1.1、搜索篩選1.2、狀態記錄1.3、播放1.4、視頻信息1.5、回放入口 2、RTSP/HLS/FLV/RTMP拉流Onvif流媒體服務 1、視頻廣場 1.1、搜索篩選 可以下拉篩選 在線、離線 &a…

C++部分復習筆記上

C語法復習 1. C入門基礎 缺省參數 半缺省參數必須從右往左依次來給出&#xff0c;不能間隔著給缺省參數不能在函數聲明和定義中同時出現缺省值必須是常量或者全局變量C語言不支持&#xff08;編譯器不支持&#xff09; 函數重載 函數重載是函數的一種特殊情況&#xff0c;…

前端跨域問題--解析與實戰

引言 在現代網絡應用中&#xff0c;跨域問題是一個常見的挑戰。由于瀏覽器的同源策略&#xff0c;限制了從不同源&#xff08;域名、協議或端口&#xff09;進行資源共享&#xff0c;這就造成了跨域訪問的限制。跨域資源共享&#xff08;CORS&#xff09;是一種技術&#xff0…

如何無線連接ios,自動化穩定

如果你的iPhone的USB端口無法使用&#xff0c;但你需要進行自動化測試或其他操作&#xff0c;可以通過無線連接來實現。無線連接通常涉及到使用Wi-Fi網絡&#xff0c;這樣你就可以在不使用USB線的情況下與設備交互。以下是一些可以考慮的方法&#xff1a; 1.使用Xcode進行無線…

William Yang:從區塊鏈先鋒到藝術平臺創始人

在區塊鏈技術和加密貨幣市場飛速發展的今天&#xff0c;William Yang無疑是這一領域的佼佼者。他不僅在學術和媒體領域取得了顯著成就&#xff0c;更在創業之路上不斷探索&#xff0c;成為了業內知名的KOL&#xff08;關鍵意見領袖&#xff09;。今天&#xff0c;我們有幸采訪到…

AI姓氏頭像生成微信小程序系統源碼

&#x1f525;【科技新潮流】AI姓氏頭像生成系統&#xff0c;你的專屬個性新名片&#xff01;&#x1f389; &#x1f31f; 開篇驚艷&#xff1a;一鍵解鎖你的姓氏魅力 ? Hey小伙伴們&#xff0c;今天我要安利一個超酷炫的科技小玩意——AI姓氏頭像生成系統&#xff01;是不…

js字符串序列化為二進制數據

在JavaScript中&#xff0c;可以通過不同的方式將字符串序列化為二進制數據。以下是幾種常見的方法&#xff1a; TextEncoder 和 TextDecoder JavaScript 提供了 TextEncoder 和 TextDecoder 對象&#xff0c;可以用來處理字符串和二進制數據之間的轉換。 // 將字符串轉換為二進…

MySQL Server時區支持

本文介紹MySQL維護的時區設置——如何加載命名時間支持所需的系統表&#xff0c;如何及時了解時區變化&#xff0c;以及如何啟用閏秒支持。 從MySQL 8.0.19開始&#xff0c;插入的日期時間值也支持時區偏移。 1 時區變量 MySQL Server維護了幾個時區設置&#xff1a; 服務器…

爬蟲筆記20——票星球搶票腳本的實現

以下內容僅供交流學習使用&#xff01;&#xff01;&#xff01; 思路分析 前面的爬蟲筆記一步一步走過來我們的技術水平也有了較大的提升了&#xff0c;現在我們來進行一下票星球搶票實戰項目&#xff0c;實現票星球的自動搶票。 我們打開票星球的移動端頁面&#xff0c;分…