Java 安全框架shiro初探之一

1.Java安全框架除了spring家族另一個就是shiro框架

不過最近還有一個國產框架很好用:Sa-Token 添加鏈接描述,想了解的小伙伴可以去look look

shiro 官方文檔

(https://shiro.apache.org/)

1. 學習教程 參考 (https://www.w3cschool.cn/shiro/)

Apache Shiro 是 Java 的一個安全框架。目前,使用 Apache Shiro 的人越來越多,因為它相當簡單,對比 Spring Security,可能沒有 Spring Security 做的功能強大,但是在實際工作時可能并不需要那么復雜的東西,所以使用小而簡單的 Shiro 就足夠了。對于它倆到底哪個好,這個不必糾結,能更簡單的解決項目問題就好了。

1.Authentication:身份認證 / 登錄,驗證用戶是不是擁有相應的身份;

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

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

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

5.Web Support:Web 支持,可以非常容易的集成到 Web 環境;Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色 / 權限不必每次去查,這樣可以提高效率;

Concurrency:shiro 支持多線程應用的并發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;
Testing:提供測試支持;
Run As:允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;
Remember Me:記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。
請添加圖片描述

Subject:主體,代表了當前 “用戶”,這個用戶不一定是一個具體的人,與當前應用交互的任何東西都是 Subject,如網絡爬蟲,機器人等;即一個抽象概念;所有 Subject 都綁定到 SecurityManager,與 Subject 的所有交互都會委托給 SecurityManager;可以把 Subject 認為是一個門面;SecurityManager 才是實際的執行者;

SecurityManager:安全管理器;即所有與安全有關的操作都會與 SecurityManager 交互;且它管理著所有 Subject;可以看出它是 Shiro 的核心,它負責與后邊介紹的其他組件進行交互,如果學習過 SpringMVC,你可以把它看成 DispatcherServlet 前端控制器;

Realm:域,Shiro 從 Realm 獲取安全數據(如用戶、角色、權限),就是說 SecurityManager 要驗證用戶身份,那么它需要從 Realm 獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從 Realm 得到用戶相應的角色 / 權限進行驗證用戶是否能進行操作;可以把 Realm 看成 DataSource,即安全數據源。

1.添加依賴

 <dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.2</version></dependency>

2.創建配置信息用戶的信息

[users]
jiangnan=123456
huangchao=9521

3.編寫認證代碼 sample demo

  Scanner scanner = new Scanner(System.in);System.out.println("輸入用戶名");String userName = scanner.next();System.out.println("輸入密碼");String pwd = scanner.next();//1.創建安全管理器IniSecurityManagerFactory factory = new IniSecurityManagerFactory("classpath:shiro.ini");SecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);//2.創建主體Subject subject = SecurityUtils.getSubject();AuthenticationToken userToken = new UsernamePasswordToken(userName, pwd);try {//3.認證subject.login(userToken);System.out.println("驗證成功");} catch (AuthenticationException e) {e.printStackTrace();System.out.println("驗證失敗");}
4.通過跟蹤源碼加深理解菜菜的我畫了一個草圖,大佬就別看笑話了~~~

請添加圖片描述

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

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

相關文章

2024濟南大健康展會,第六屆中國國際健康產業博覽會5月舉辦

大力發展全國健康事業 助力健康中國行動戰略 DJK 2024第6屆中國&#xff08;濟南&#xff09;國際大健康產業博覽會 The 2024 sixth China (Jinan) International Big Health Industry Expo 時間&#xff1a;2024年05月27日—29日 場館&#xff1a;中國濟南黃河國際會展中心 …

java中實現線程池的方式有哪些?

在 Java 中&#xff0c;實現線程池的方式主要有兩種&#xff1a; ThreadPoolExecutor 類&#xff1a; ThreadPoolExecutor 是 Java 提供的靈活、強大的線程池實現類。通過創建 ThreadPoolExecutor 對象&#xff0c;可以自定義線程池的各種參數&#xff0c;包括核心線程數、最大…

JavaScript-節點操作

節點操作 DOM節點 DOM節點&#xff1a;DOM樹里每一個內容都稱之為節點 節點類型&#xff1a; 元素節點 所有的標簽 比如body、divhtml時跟節點 屬性節點 所有的屬性&#xff0c;比如href 文本節點 所有的文本 其他 查找節點 節點的關系&#xff1a;針對的找親戚返回的都是…

java_springboot_ssm流浪寵物救助報名管理系統

用戶&#xff1a; 注冊登錄 寵物百科&#xff1a;提供一些養寵物的專業知識、養寵前的注意事項等等 寵物信息&#xff1a;包括寵物圖片、品種、性別、年齡、疫苗、領取要求等內容 寵物領養&#xff1a;領養人自己的詳細住址、收入情況、有無養過寵物的記錄&#xff08;有則出示…

學習Java第64天,請求轉發和響應重定向

請求轉發和響應重定向 概述 什么是請求轉發和響應重定向 請求轉發和響應重定向是web應用中間接訪問項目資源的兩種手段,也是Servlet控制頁面跳轉的兩種手段 請求轉發通過HttpServletRequest實現,響應重定向通過HttpServletResponse實現 請求轉發生活舉例: 張三找李四借錢,李四…

人工智能原理復習--搜索策略(二)

文章目錄 上一篇啟發式搜索與或圖搜索博弈下一篇 上一篇 人工智能原理復習–搜索策略&#xff08;一&#xff09; 啟發式搜索 提高一般圖搜索效率的關鍵是優化OPEN表中節點的排序方式 最理想的情況是每次排序OPEN表表首n總在解答路徑上 全局排序–對OPEN表中的所有節點進行…

vue實例事件

實例方法 / 事件 vm.$on 監聽當前實例上的自定義事件。事件可以由 vm.$emit 觸發。回調函數會接收所有傳入事件觸發函數的額外參數。 vm.$on(test, function (msg) {console.log(msg) }) vm.$emit(test, hi) // > "hi"vm.$once( event, callback ) 監聽一個自定義…

Vue筆記(二)基本語法

基本語法 <style> table {border-collapse: collapse;margin:0 auto; } strong {color: rgb(235, 51, 100); }td, th {padding-left: 6px; } table tr td:first-child {width:150px } table tr td:nth-child(2) {width:300px } </style> <template><tabl…

mysql面試題——MVCC

一&#xff1a;什么是MVCC&#xff1f; 多版本并發控制&#xff0c;更好的方式去處理讀-寫沖突&#xff0c;就是為了查詢一些正在被另一個事務更新的行&#xff0c;并且可以看到它們被更新之前的值&#xff0c;這樣在做查詢的時候就不用等待另一個事務釋放鎖。 二&#xff1a…

萬界星空科技mes系統中看板管理

我們很多企業現在都有大屏&#xff0c;那到底萬界星空科技低代碼云mes系統管理中看板管理有什么作用&#xff1f;我總結了幾條: 1.提高車間的生產效率 2.有效的監控設備運行狀況 3.控制生產線運行 4.增加和改善用戶體驗 5.提高工作效率和工作安全性

Zabbix監控騰訊云VPC

一、簡介 私有網絡&#xff08;Virtual Private Cloud&#xff0c;VPC&#xff09;是騰訊云上一塊由用戶自定義的邏輯隔離網絡空間&#xff0c;為云服務器、云數據庫等資源提供安全可控的網絡環境。通過構建邏輯隔離的、用戶自定義配置的網絡空間&#xff0c;用戶能夠提升其云…

vue組件插槽

組件的插槽 組件本身就是一個容器&#xff0c;也可以是一個vue對象&#xff0c;也是一個虛擬DOM 普通插槽 組件本身是一個容器&#xff0c;這個容器本身是空的&#xff0c;當我們把需要封裝的html結構裝進去之后&#xff0c;我們可以認為這個容器被塞滿了&#xff0c;那就意…

WIN11家庭中文版使用ENSP+VirtualBox啟動AR失敗40錯誤+未完全關閉hyper-V,以及安裝VirtualBox兼容性問題

使用版本&#xff1a;eNSP 1.3.00.100VirtualBox 5.2.44WinPcap_4_1_3Wireshark最新版。 win11系統最好按照上述版本安裝&#xff0c;VirtualBox不要安裝更高版本&#xff0c;否則可能出現不兼容情況&#xff0c;Wireshark版本要求還好&#xff0c;安裝順序是VirtualBox 5.2.4…

python+pytest接口自動化之參數關聯

什么是參數關聯&#xff1f; 參數關聯&#xff0c;也叫接口關聯&#xff0c;即接口之間存在參數的聯系或依賴。在完成某一功能業務時&#xff0c;有時需要按順序請求多個接口&#xff0c;此時在某些接口之間可能會存在關聯關系。比如&#xff1a;B接口的某個或某些請求參數是通…

如何利用人工智能+物聯網技術實現自動化設備生產

隨著科技的發展與行業競爭的日益激烈&#xff0c;制造業也逐漸走向智能化發展。制造業的改革是利用物聯網技術和自動化設備&#xff0c;實現生產線的智能化和自適應生產&#xff0c;優化生產流程&#xff0c;提高生產效率和質量&#xff0c;為企業創造更大的價值。 方案概述 智…

Gif表情包怎么用圖片制作?一招簡單易上手

很多朋友對于gif動圖的名字不是很熟悉&#xff0c;但是對于“gif表情包”一定很熟悉吧&#xff01;在日常網絡聊天中經常能見到其的身影&#xff0c;能夠調節聊天的氣氛。想要制作gif表情包可以使用gif動圖在線制作&#xff08;https://www.gif.cn/&#xff09;網站-GIF中文網&…

【C語言期末】題目+解析

文章目錄 題目1.下面哪個不是C語言的基本數據類型&#xff1f;&#xff08; B &#xff09;2.C語言的標識符應以字母或&#xff08; A &#xff09;開頭。3.如果需要在C程序里調用標準函數庫中的printf函數&#xff0c;則應該在程序的開頭包含哪個頭文件&#xff1f;&#xff0…

學習Linux(2)-學習Linux命令

Linux目錄結構 Linux目錄結構-菜鳥教程 /bin&#xff1a;bin 是 Binaries (二進制文件) 的縮寫, 這個目錄存放著最經常使用的命令。 /boot&#xff1a;這里存放的是啟動 Linux 時使用的一些核心文件&#xff0c;包括一些連接文件以及鏡像文件。 /dev &#xff1a;dev 是 De…

TensorFlow 常用代碼

TensorFlow 是由 Google 開發的一個用于數值計算的開源軟件庫&#xff0c;主要用于構建和訓練機器學習模型。它的核心是使用數據流圖來描述計算任務。數據流圖是由節點和邊組成的有向圖&#xff0c;每個節點表示一個計算任務&#xff0c;每條邊表示數據傳輸。 TensorFlow 支持…

Dockerfile文件

什么是dockerfile? Dockerfile是一個包含用于組合映像的命令的文本文檔。可以使用在命令行中調用任何命令。 Docker通過讀取Dockerfile中的指令自動生成映像。 docker build命令用于從Dockerfile構建映像。可以在docker build命令中使用-f標志指向文件系統中任何位置的Docke…