1. 程式人生 > >新手最強許可權管理框架——Shiro的簡易說明與開發配置

新手最強許可權管理框架——Shiro的簡易說明與開發配置

Apache Shiro是Java的一個安全框架。功能強大(強大......),使用簡單的Java安全框架,它為開發人員提供一個直觀而全面的認證,授權,加密及會話管理的解決方案。

實際上,Shiro的主要功能是管理應用程式中與安全相關的全部,同時儘可能支援多種實現方法。Shiro是建立在完善的介面驅動設計和麵向物件原則之上的,支援各種自定義行為。Shiro提供的預設實現,使其能完成與其他安全框架同樣的功能,這不也是我們一直努力想要得到的嗎!

Apache Shiro相當簡單,對比Spring Security,可能沒有Spring Security做的功能強大,但是在實際工作時可能並不需要那麼複雜的東西,所以使用小而簡單的Shiro就足夠了。對於它倆到底哪個好,這個不必糾結,能更簡單的解決專案問題就好了。

Shiro可以非常容易的開發出足夠好的應用,其不僅可以用在JavaSE環境,也可以用在JavaEE環境。Shiro可以幫助我們完成:認證、授權、加密、會話管理、與Web整合、快取等。這不就是我們想要的嘛,而且Shiro的API也是非常簡單;其基本功能點如下圖所示:

Authentication身份認證/登入,驗證使用者是不是擁有相應的身份;

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

Session Manager會話管理,即使用者登入後就是一次會話,在沒有退出之前,它的所有資訊都在會話中;會話可以是普通

JavaSE環境的,也可以是如Web環境的;

Cryptography加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是明文儲存;

Web Support:Web支援,可以非常容易的整合到Web環境;

Caching:快取,比如使用者登入後,其使用者資訊、擁有的角色/許可權不必每次去查,這樣可以提高效率;

Concurrency:shiro支援多執行緒應用的併發驗證,即如在一個執行緒中開啟另一個執行緒,能把許可權自動傳播過去;

Testing:提供測試支援;

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

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

記住一點,Shiro不會去維護使用者、維護許可權;這些需要我們自己去設計/提供;然後通過相應的介面注入給Shiro即可。

接下來我們分別從外部和內部來看看Shiro的架構,對於一個好的框架,從外部來看應該具有非常簡單易於使用的API,且API契約明確;從內部來看的話,其應該有一個可擴充套件的架構,即非常容易插入使用者自定義實現,因為任何框架都不能滿足所有需求。

首先,我們從外部來看Shiro吧,即從應用程式角度的來觀察如何使用Shiro完成工作。如下圖:

可以看到:應用程式碼直接互動的物件是Subject,也就是說Shiro的對外API核心就是Subject;其每個API的含義:

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

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

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

也就是說對於我們而言,最簡單的一個Shiro應用:

1、應用程式碼通過Subject來進行認證和授權,而Subject又委託給SecurityManager;

2、我們需要給Shiro的SecurityManager注入Realm,從而讓SecurityManager能得到合法的使用者及其許可權進行判斷。

從以上也可以看出,Shiro不提供維護使用者/許可權,而是通過Realm讓開發人員自己注入。

接下來我們來從Shiro內部來看下Shiro的架構,如下圖所示:

Subject:主體,可以看到主體可以是任何可以與應用互動的“使用者”;

SecurityManager:相當於SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心臟;所有具體的互動都通過SecurityManager進行控制;它管理著所有Subject、且負責進行認證和授權、及會話、快取的管理。

Authenticator:認證器,負責主體認證的,這是一個擴充套件點,如果使用者覺得Shiro預設的不好,可以自定義實現;其需要認證策略(Authentication Strategy),即什麼情況下算使用者認證通過了;

Authrizer:授權器,或者訪問控制器,用來決定主體是否有許可權進行相應的操作;即控制著使用者能訪問應用中的哪些功能;

Realm:可以有1個或多個Realm,可以認為是安全實體資料來源,即用於獲取安全實體的;可以是JDBC實現,也可以是LDAP實現,或者記憶體實現等等;由使用者提供;注意:Shiro不知道你的使用者/許可權儲存在哪及以何種格式儲存;所以我們一般在應用中都需要實現自己的Realm;

SessionManager:如果寫過Servlet就應該知道Session的概念,Session呢需要有人去管理它的生命週期,這個元件就是SessionManager;而Shiro並不僅僅可以用在Web環境,也可以用在如普通的JavaSE環境、EJB等環境;所有呢,Shiro就抽象了一個自己的Session來管理主體與應用之間互動的資料;這樣的話,比如我們在Web環境用,剛開始是一臺Web伺服器;接著又上了臺EJB伺服器;這時想把兩臺伺服器的會話資料放到一個地方,這個時候就可以實現自己的分散式會話(如把資料放到Memcached伺服器);

SessionDAO:DAO大家都用過,資料訪問物件,用於會話的CRUD,比如我們想把Session儲存到資料庫,那麼可以實現自己的SessionDAO,通過如JDBC寫到資料庫;比如想把Session放到Memcached中,可以實現自己的Memcached SessionDAO;另外SessionDAO中可以使用Cache進行快取,以提高效能;

CacheManager:快取控制器,來管理如使用者、角色、許可權等的快取的;因為這些資料基本上很少去改變,放到快取中後可以提高訪問的效能

Cryptography:密碼模組,Shiro提高了一些常見的加密元件用於如密碼加密/解密的。

相關推薦

新手許可權管理框架——Shiro簡易說明開發配置

Apache Shiro是Java的一個安全框架。功能強大(強大......),使用簡單的Java安全框架,它為開發人員提供一個直觀而全面的認證,授權,加密及會話管理的解決方案。 實際上,Shiro的主要功能是管理應用程式中與安全相關的全部,同時儘可能支援多種實現方法。S

基於RBAC的許可權管理框架Shiro(1)框架簡介

Shiro是apache旗下一個開源框架,它將軟體系統的安全認證相關的功能抽取出來,實現使用者身份認證,許可權授權、加密、會話管理等功能,組成了一個通用的安全認證框架。也是當下比較主流的輕量級許可權管理框架。相較於spring security(原名Acegi)

單點登入cas許可權管理框架shiro整合-spring專案方式

       之前那篇文章介紹了普通web專案中單點登入cas與許可權管理框架shiro整合方式,這裡說下spring專案中的整合方式,首先還是配置一個filter Java程式碼   <filter>           <filter-name>shiroFilter&

java許可權管理框架Shiro(最近學習整理)

郵箱投稿[email protected]微信公眾號搜尋:低調小熊貓; 關注看更多學習資源最炫求職簡歷.BAT的offer助攻簡歷http://120.79.185.110/index.html qq掃描需下載微信,建議直接微信公眾號搜尋哦 根據的我瞭解,現在整個行業的

SpringBoot整合Shiro許可權管理框架

專案目錄結構 1.pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://

Shiro許可權管理框架(1)

許可權管理:  1.什麼是許可權管理:基本上涉及到使用者參與的系統都要進行許可權管理,許可權管理屬於系統安全範疇,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略可以訪問而且只能訪問自己被授權的資源。    許可權管理包括使用者身份認證和授權兩

Shiro許可權管理框架

1      許可權管理 1.1    什麼是許可權管理          基本上涉及到使用者參與的系統都要進行許可權管理,許可權管理屬於系統安全的範疇,許可權管理實現對使用者訪問系統的控制,按照安全規則或者安全策略控制使用者可以訪問而且只能訪問自己被授權的資源。

spring boot中使用shiro許可權管理框架

  使用idea建立spring boot工程 勾選web裡的web依賴 , 因為spring boot裡有spri

Shiro許可權管理框架(一):Shiro的基本使用

首發地址:https://www.guitu18.com/post/2019/07/26/43.html 核心概念 Apache Shiro是一個強大且易用的Java安全框架,執行身份驗證、授權、密碼和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大

Shiro許可權管理框架(二):Shiro結合Redis實現分散式環境下的Session共享

首發地址:https://www.guitu18.com/post/2019/07/28/44.html 本篇是Shiro系列第二篇,使用Shiro基於Redis實現分散式環境下的Session共享。在講Session共享之前先說一下為什麼要做Session共享。 為什麼要做Session共享 什麼是Ses

Shiro許可權管理框架(三):Shiro許可權過濾器的初始化流程和實現原理

本篇是Shiro系列第三篇,Shiro中的過濾器初始化流程和實現原理。Shiro基於URL的許可權控制是通過Filter實現的,本篇從我們注入的ShiroFilterFactoryBean開始入手,翻看原始碼追尋Shiro中的過濾器的實現原理。 初始化流程 ShiroFilterFactoryBean實現

Shiro許可權管理框架(四):深入分析Shiro中的Session管理

其實關於Shiro的一些學習筆記很早就該寫了,因為懶癌和拖延症晚期一直沒有落實,直到今天公司的一個專案碰到了在叢集環境的單點登入頻繁掉線的問題,為了解決這個問題,Shiro相關的文件和教程沒少翻。最後問題解決了,但我覺得我也是時候來做一波Shiro學習筆記了。 本篇是Shiro系列第四篇,Shiro中的過濾器

Shiro許可權管理框架(五):自定義Filter實現及其問題排查記錄

明確需求 在使用Shiro的時候,鑑權失敗一般都是返回一個錯誤頁或者登入頁給前端,特別是後臺系統,這種模式用的特別多。但是現在的專案越來越多的趨向於使用前後端分離的方式開發,這時候就需要響應Json資料給前端了,前端再根據狀態碼做相應的操作。那麼Shiro框架能不能在鑑權失敗的時候直接返回Json資料呢?答案

PHP -Casbin: 支援 ACL、RBAC、ABAC 多種模型的 PHP 許可權管理框架

PHP-Casbin 是一個用 PHP 語言打造的輕量級開源訪問控制框架( https://github.com/php-casbin/php-casbin ),目前在 GitHub 開源。PHP-Casbin 採用了元模型的設計思想,支援多種經典的訪問控制方案,如基於角色的訪問控制 RBAC、基於屬性的訪問

轉:JAVAWEB開發許可權管理(二)——shiro入門詳解以及使用方法、shiro認證shiro授權

原文地址:JAVAWEB開發之許可權管理(二)——shiro入門詳解以及使用方法、shiro認證與shiro授權 以下是部分內容,具體見原文。 shiro介紹 什麼是shiro shiro是Apache的一個開源框架,它將軟體系統的安全認證相關的功能抽取出來,實現使用者身份認證,許可權授權、加密、會話

Retrofit 2.0使用詳解,配合OkHttp、Gson,Android網路請求框架

1.使用retrofit,需要下載一些jar包 2.介紹這些jar包的作用 在1.x版本的retrofit框架: 只需要Retrofit包和gson-2.4.jar包就行了,那時的Retrofit預設是使用okhttp jar包來網路請

許可權驗證框架Shiro

許可權驗證框架Shiro: Shiro簡介 什麼是Shiro: shiro是一個強大易用的Java安全框架,提供了認證,授權,加密,回話管理等功能; 認證(Authentication):使用者身份識別,常被稱為使用者“登入”,判斷使用者是否登陸,如果未登陸,則攔截其請求

後臺許可權管理控制shiro+jsonMenu

在學習後臺的許可權控制,自己參考了各種資料後的新手demo,ui框架選型為大家可以參照網上的,專案架構為spring mvc + spring+mybatis,簡單易用好上手!搭建好框架後開始了第一個任務,設計並實現一套簡單的許可權管理功能。 一套最基本的許可

細粒度通用許可權管理框架(可控制表格行內按鈕)原始碼提供下載

特別宣告: 提供的原始碼已經包含了 AppBoxPro 的全部原始碼,用 VS2012 開啟專案後,直接 Ctrl+F5 可以執行起來(預設使用VS自帶的LocalDB資料庫)。 FineUIPro是商業程式,僅包含v1.7.0公測版的DLL;當然你也可以自行把 FineUIPro 換成 Fine

Spring Security許可權管理框架

Spring Security Spring Security是作為過濾器控制權限的,在web.xml中配置過濾器。 <filter> <filter-name>springSecurityFilterChain</