Shrio安全框架簡介
本文介紹了Shrio安全框架的基礎概念,帶你初步認識了解Shrio安全框架,一起學習,共同進步
一.Shrio概念介紹
Apache Shiro是一個強大且易用的Java安全框架
,執行身份驗證、授權、密碼和會話管理。使用Shiro的易于理解的API,您可以快速、輕松地獲得任何應用程序,從最小的移動應用程序到最大的網絡和企業應用程序。
二.應用場景
- 目前,使用 Apache Shiro 的人越來越多,因為它相當簡單,對比 Spring Security,可能沒有Spring Security 做的功能強大,但是在實際工作時可能并不需要那么復雜的東西,所以使用小而簡單的 Shiro 就足夠了。
- Shiro 可以幫助我們完成:
認證、授權、加密、會話管理、與 Web 集成、緩存等。
這不就是我們想要的嘛,而且 Shiro 的 API 也是非常簡單;
三.基本功能介紹
- Authentication:身份認證 / 登錄,驗證用戶是不是擁有相應的身份;
- Authorization:授權,即權限驗證,驗證某個已認證的用戶是否擁有某個權限;即判斷用戶是否能做事情,常見的如:驗證某個用戶是否擁有某個角色。或者細粒度的驗證某個用戶對某個資源是否具有某個權限;
- Session Manager:會話管理,即用戶登錄后就是一次會話,在沒有退出之前,它的所有信息都在會話中;會話可以是普通 JavaSE 環境的,也可以是如 Web 環境的;
- Cryptography:加密,保護數據的安全性,如密碼加密存儲到數據庫,而不是明文存儲;
- Web Support:Web 支持,可以非常容易的集成到 Web 環境;
- Caching:緩存,比如用戶登錄后,其用戶信息、擁有的角色 / 權限不必每次去查,這樣可以提高效率;
- Concurrency:shiro 支持多線程應用的并發驗證,即如在一個線程中開啟另一個線程,能把權限自動傳播過去;
- Testing:提供測試支持;
- Run As:允許一個用戶假裝為另一個用戶(如果他們允許)的身份進行訪問;
- Remember Me:記住我,這個是非常常見的功能,即一次登錄后,下次再來的話不用登錄了。
//身份驗證相關代碼
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
//1.從token中獲取用戶名
UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
String username = token.getUsername();
String password = new String(token.getPassword());
//2.根據用戶名查詢數據庫(UserDAO),得到一個User對象
User user = userDAO.queryUserByAccount(username);
if (user == null) {
throw new UnknownAccountException("帳號不存在!");
} else {
//用戶存在則驗證密碼
String md5Pwd = new SimpleHash("MD5", password).toHex();
if (!user.getPassword().equals(md5Pwd)) {
throw new IncorrectCredentialsException("密碼錯誤!");
}
}
// Object String String
return new SimpleAuthenticationInfo(user, password, getName());
}
- Shiro 不會去維護用戶、維護權限;這些需要我們自己去設計 / 提供;然后通過相應的接口注入給 Shiro 即可。
四.核心組件
三個核心組件:Subject, SecurityManager 和 Realms.
- Subject:即“當前操作用戶”。但是,在Shiro中,Subject這一概念并不僅僅指人,也可以是第三方進程、后臺帳戶(Daemon Account)或其他類似事物。它僅僅意味著“當前跟軟件交互的東西”。Subject代表了當前用戶的安全操作,SecurityManager則管理所有用戶的安全操作。
- SecurityManager:它是Shiro框架的核心,Shiro通過SecurityManager來管理內部組件實例,并通過它來提供安全管理的各種服務。
- Realm:
- ①Realm充當了Shiro與應用安全數據間的“橋梁”或者“連接器”。也就是說,當對用戶執行認證(登錄)和授權(訪問控制)驗證時,Shiro會從應用配置的Realm中查找用戶及其權限信息。
- ②從這個意義上講,Realm實質上是一個安全相關的DAO:它封裝了數據源的連接細節,并在需要時將相關數據提供給Shiro。當配置Shiro時,你必須至少指定一個Realm,用于認證和(或)授權。配置多個Realm是可以的,但是至少需要一個。
- ③Shiro內置了可以連接大量安全數據源(又名目錄)的Realm,如LDAP、關系數據庫(JDBC)、類似INI的文本配置資源以及屬性文件等。如果缺省的Realm不能滿足需求,你還可以插入代表自定義數據源的自己的Realm實現。
- Invest in yourself while you’re young
2020.03.17 來自辰兮的第30篇博客
智能推薦
shrio入門
shrio入門 Shiro簡介 1. 什么是shiro shiro是apache的一個開源框架,是一個權限管理的框架,實現 用戶認證、用戶授權。 spring中有spring security (原名Acegi),是一個權限框架,它和spring依賴過于緊密,沒有shiro使用簡單。 shiro不依賴于spring,shiro不僅可以實現 web應用的權限管理,還可以實現c/s系統, 分布式系統權...
Django框架 - 01 簡介
Django的簡介: 1. 概述 2. Django中的MVC模式 : 概述 : 一種軟件設計典范, 用一種業務邏輯,數據, 界面顯示分離的方法組織代碼, 將業務邏輯聚集到一個部件里面。 核心思想 : 解耦 圖解 : 編程模式 : 優點 : 降低各功能模塊之間的耦合性, 方便變更, 更容易重構代碼, 最大程度上實現了代碼的重用. 瀏覽器中MVC的表現形式圖解: 3. Django中的MVT模式 :...
Hibernate框架簡介④
Hibernate的關聯映射: 多對一關聯映射: 第一步: 創建實體模型 Emp類: Team類: 第二步: 配置實體映射文件 Emp.hbm.xml: Team.hbm.xml: hibernate.cfg.xml: 生成建表腳本: 數據庫建表結果: 第三步: 測試多對一關聯映射 測試代碼: hibernate發出sql語句: 數據庫結果: 下面講解一個知識點: 級...
SpringMVC框架簡介①
首先, 建項目之后引包: 鏈接:https://pan.baidu.com/s/1ekU8ga_GjSWyTmRRcVoCgw 密碼:xhxd 配置中央轉發器(dispatchservlet), web.xml SpringMVC的配置文件的頭信息: 該配置文件名稱有一定的規范, 默認是按照在web.xml配置的"<servlet-nam...
Spring框架簡介⑥
八 注解方式注入 首先 引入注解依賴包 鏈接:https://pan.baidu.com/s/1lyoSeLmkkFJurBF_4GFH4g 密碼:hyz8 引入約束文件: 按照我給的頭信息即可配置文件信息 @Resource注解 1 加在屬性上 使用注解方式不需要使用set方法 UserServiceImpl類 測試代碼: 輸出: user被保存了 2...
猜你喜歡
freemarker + ItextRender 根據模板生成PDF文件
1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...
電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!
Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...
requests實現全自動PPT模板
http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...