網站首頁 編程語言 正文
1、Shiro
????????Shiro是一個強大而靈活的開源安全框架,能夠非常清晰的處理認證、授權、管理會話以及密碼加密。
????????Shiro四大核心功能:Authentication,Authorization,Cryptography,Session Management?
?
?
Shiro三個核心組件:Subject, SecurityManager 和 Realms.
? ? ? ? Subject:主體,可以看到主體可以是任何可以與應用交互的 “用戶”;
? ? ? ? SecurityManager:相當于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心臟;所有具體的交互都通過 SecurityManager 進行控制;它管理著所有 Subject、且負責進行認證和授權、及會話、緩存的管理。
? ? ? ? Realm:域,Shiro從Realm獲取安全數據(如用戶、角色、權限),就是說SecurityManager要驗證用戶身份,那么它需要從Realm獲取相應的用戶進行比較以確定用戶身份是否合法;也需要從Realm得到用戶相應的角色/權限進行驗證用戶是否能進行操作;可以把Realm看成DataSource,即安全數據源。
?
2、Spring Security
? ? ? ? 是一個能夠為基于Spring的企業應用系統提供聲明式的安全訪問控制解決方案的安全框架。它提供了一組可以在Spring應用上下文中配置的Bean,充分利用了Spring IOC,DI(控制反轉Inversion of Control ,DI:Dependency Injection 依賴注入)和AOP(面向切面編程)功能,為應用系統提供聲明式的安全訪問控制功能,減少了為企業系統安全控制編寫大量重復代碼的工作。
?Spring Security一般流程:
? ? ? ? ①當用戶登錄時,前端將用戶輸入的用戶名、密碼信息傳輸到后臺,后臺用一個類對象將其封裝起來,通常使用的是UsernamePasswordAuthenticationToken這個類。
? ? ? ? ②程序負責驗證這個類對象。驗證方法是調用Service根據username從數據庫中取用戶信息到實體類的實例中,比較兩者的密碼,如果密碼正確就成功登陸,同時把包含著用戶的用戶名、密碼、所具有的權限等信息的類對象放到SecurityContextHolder(安全上下文容器,類似Session)中去。
? ? ? ? ③用戶訪問一個資源的時候,首先判斷是否是受限資源。如果是的話還要判斷當前是否未登錄,沒有的話就跳到登錄頁面。
? ? ? ? ④如果用戶已經登錄,訪問一個受限資源的時候,程序要根據url去數據庫中取出該資源所對應的所有可以訪問的角色,然后拿著當前用戶的所有角色一一對比,判斷用戶是否可以訪問。
3、 Spring Security和Shiro區別
相同點
? ? ? ? ①、認證功能
? ? ? ? ②、授權功能
? ? ? ? ③、加密功能
? ? ? ? ④、會話管理
? ? ? ? ⑤、緩存支持
? ? ? ? ⑥、rememberMe功能
不同點:
? ? ? ? 1、Spring Security 基于Spring 開發,項目若使用 Spring 作為基礎,配合 Spring Security 做權限更加方便,而 Shiro 需要和 Spring 進行整合開發;
? ? ? ? 2、Spring Security 功能比 Shiro 更加豐富些,例如安全維護方面;
? ? ? ? 3、Spring Security 社區資源相對比 Shiro 更加豐富;
? ? ? ? 4、Shiro 的配置和使用比較簡單,Spring Security 上手復雜些;
? ? ? ? 5、Shiro 依賴性低,不需要任何框架和容器,可以獨立運行.Spring Security 依賴Spring容器;
? ? ? ? 6、shiro 不僅僅可以使用在web中,它可以工作在任何應用環境中。在集群會話時Shiro最重要的一個好處或許就是它的會話是獨立于容器的。
?
安全框架Shiro和SpringSecurity的比較 - hanease - 博客園?
原文鏈接:https://blog.csdn.net/weixin_67588007/article/details/126692945
相關推薦
- 2022-03-26 正則表達式詳析+常用示例_正則表達式
- 2022-01-12 cesium polygon添加邊界線不起作用
- 2022-04-26 JQuery實現電梯導航特效_jquery
- 2022-06-08 Field setAccessible()方法的作用及應用場景
- 2023-10-16 微信小程序瀏覽docx,pdf等文件在線預覽使用wx.openDocument
- 2022-10-14 yum-config-manager 命令找不到的解決方法
- 2023-04-01 JQuery動態生成的按鈕無法觸發問題及完美解決方法_jquery
- 2022-09-12 shell腳本5種執行方式及腳本不同的執行方法和區別詳解_linux shell
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支