1. 程式人生 > >基於RBAC的許可權管理框架Shiro(1)框架簡介

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

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

  • Subject 主體 用於記錄當前的操作使用者,Subject在shiro中是一個介面,介面中定義了很多認證授相關的方法,外部程式通過subject進行認證授權,而subject是通過SecurityManager安全管理器進行認證授權
  • SecurityManager安全管理器,對Subject 進行管理,他是shiro的核心SecurityManager是一個介面,繼承了Authenticator, Authorizer, SessionManager這三個介面。
  • Authenticator認證器 對使用者身份進行認證
  • Authorizer 授權器 使用者通過認證後,來判斷時候擁有該許可權
  • realm 獲取使用者許可權資料
  • sessionManager 會話管理 shiro框架定義了一套會話管理,它不依賴web容器的session,所以shiro可以使用在非web應用上,也可以將分散式應用的會話集中在一點管理,此特性可使它實現單點登入。
  • CacheManager 快取管理器 將使用者許可權資料儲存在快取,這樣可以提高效能。

    shiro 的認證過程:

  • 1、 建立token令牌,token中有使用者提交的認證資訊即賬號和密碼
  • 2、 執行subject.login(token),最終由securityManager通過Authenticator進行認證
  • 3、 Authenticator的實現ModularRealmAuthenticator呼叫realm從ini配置檔案取使用者真實的賬號和密碼,這裡使用的是IniRealm(shiro自帶)
  • 4、 IniRealm先根據token中的賬號去ini中找該賬號,如果找不到則給ModularRealmAuthenticator返回null,如果找到則匹配密碼,匹配密碼成功則認證通過。

    shiro 的認證程式碼

// 使用者登陸、使用者退出
    @Test
    public void testLoginLogout() {

        // 構建SecurityManager工廠,IniSecurityManagerFactory可以從ini檔案中初始化SecurityManager環境
Factory<SecurityManager> factory = new IniSecurityManagerFactory( "classpath:shiro.ini"); // 通過工廠建立SecurityManager SecurityManager securityManager = factory.getInstance(); // 將securityManager設定到執行環境中 SecurityUtils.setSecurityManager(securityManager); // 建立一個Subject例項,該例項認證要使用上邊建立的securityManager進行 Subject subject = SecurityUtils.getSubject(); // 建立token令牌,記錄使用者認證的身份和憑證即賬號和密碼 UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123"); try { // 使用者登陸 subject.login(token); } catch (AuthenticationException e) { // TODO Auto-generated catch block e.printStackTrace(); } // 使用者認證狀態 Boolean isAuthenticated = subject.isAuthenticated(); System.out.println("使用者認證狀態:" + isAuthenticated); // 使用者退出 subject.logout(); isAuthenticated = subject.isAuthenticated(); System.out.println("使用者認證狀態:" + isAuthenticated); }

shiro 的自定義realm 上面一篇文章已經說過,這裡就不做贅述了

shiro 的授權方式

  1. 程式設計式 通過寫if/else 授權程式碼塊完成:
    Subject subject = SecurityUtils.getSubject();
    if(subject.hasRole(“admin”)) {
    //有許可權
    } else {
    //無許可權
    }
  2. 註解式:通過在執行的Java方法上放置相應的註解完成:
    @RequiresRoles(“admin”)
    public void hello() {
    //有許可權
    }
    3. JSP/GSP 標籤:在JSP/GSP 頁面通過相應的標籤完成:

相關推薦

基於RBAC許可權管理框架Shiro1框架簡介

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

Spring框架學習1Spring簡介

校驗和 遵從 直接 特定 cto 適合 配置 有意 允許 內容源自:Spring 框架簡介 Spring 是一個開源框架,是為了解決企業應用程序開發復雜性而創建的。框架的主要優勢之一就是其分層架構,分層架構允許您選擇使用哪一個組件,同時為 J2EE 應用程序開發提供集成的框

基於springboot2 框架整合1:spring boot專案初始化

前言 專案中使用了很多現成的框架,都是專案經理、架構師帶來的,從來沒有自己整合過!這次決定自己從零開始整合一次,以學習鞏固。過程中參考很多開源框架的思路,工具類等,若有侵權,請速速聯絡,一定妥善處理   一:建立maven專案 這個不多說,給出pom.xml

基於Metronic的Bootstrap開發框架經驗總結1-框架總覽及選單模組的處理

最近一直很多事情,部落格停下來好久沒寫了,整理下思路,把最近研究的基於Metronic的Bootstrap開發框架進行經驗的總結出來和大家分享下,同時也記錄自己對Bootstrap開發的學習研究的點點滴滴,希望在開一個《基於MVC4+EasyUI的Web開發框架經驗總結》的系列文章,逐步介紹這個響應式框架的點

基於Tomcat的JSP 詳解1—— 概述

normal pad san borde orm ace text pin style 們使用。 一.為什麽使用JSP 下面基於Tomcat的JSP 詳解(1)—— 概述

熟練使用Lua面向物件:基於table的面向物件實現1

轉:https://www.cnblogs.com/yao2yaoblog/p/6433553.html c++和java語言機制中本身帶有面向物件的內容,而lua設計的思想是超程式設計,沒有面向物件的實現。 但是利用lua的元表(matetable)機制,可以實現面向物件。要講清楚怎樣

Java集合框架剖析1

一、Java集合  集合簡易架構圖: 1、集合是什麼?   儲存物件的容器,面嚮物件語言對事物的體現都是以物件的形式,所以為了方便對多個物件的操作,儲存物件,集合是儲存物件最常用的一種方式。   集合中可以儲存任意型別的物件,而且長度可變。在程式中有可能無法預先知道需要多少個物件,那麼用

Spring Framework框架解析1- 從圖書館示例來看xml檔案的載入過程

引言 這個系列是我閱讀Spring原始碼後的一個總結,會從Spring Framework框架的整體結構進行分析,不會先入為主的講解IOC或者AOP的原理,如果讀者有使用Spring的經驗再好不過。鑑於每個人對原始碼閱讀角度的不同,如果文中存在理解有誤的地方希望讀者能夠及時提出,共同進步。文章所分析的原始碼

MapReduce框架學習1——輸入、輸出格式

參考: JeffreyZhou的部落格園 《Hadoop權威指南》第四版 在前面的學習中,完成了幾件事: 搭建並測試Hadoop完全分散式環境; 在master節點上配置Hadoop的E

基於MT7688的OpenWrt學習筆記1——開發環境搭建

                                          &

Spring Boot2整合Shiro1:身份認證

Spring Boot2整合Shiro(1):身份認證   前言 本文主要介紹了在Spring Boot2專案中整合Shiro實現登入認證。本文假設讀者已經對Shiro和基於RBAC的許可權控制系統有了基本的認識。  本專案沒有資料庫,也就沒有dao層,所有的使用者和

Appium——python的單元測試框架unittest1

unittest為python語言自帶的單元測試框架,python把unittest封裝為一個標準模組封裝在python開發包中。unittest中常用的類有:unittest.TestCase、unittest.TestSuite、unittest.TextTestRunner、test fixture

luminus web框架學習1

第一章  你的第一個程式 由於我是mac電腦所以我暫時以我的操作為基礎(clojure對windows不友好  jdk和maven資料由於太多了我這裡就不多介紹安裝方式了) 首先使用brew install leiningen 和 brew install clojure 安裝lein

ssm框架整合1

第一次做框架整合,不免還是有點小激動的,花了2天時間,強行寫了一個登入頁面。記錄一下遇到的問題: 整合思路:從前端到後端的客戶請求,從後端到前端的客戶反饋。 整合過程:用spring-mapper介面整合後端 整合問題:查詢資料庫的時候若資料庫中的時候若資料庫沒有此資

RobotFramework自動化測試框架1- RobotFramework簡介

 對於RobotFramework自動化測試框架,我這裡會從三個單元進行闡述,希望能對你有幫助。 RobotFramework簡介 RobotFramework是什麼? Robotframework 是由python編寫的,一個開源的基於關鍵詞驅動的自動化測試框架,它可以做基於UI或者介面

小白用shiro1

本文來自網易雲社群作者:王飛首先引入一段關於shiro的介紹:開發系統中,少不了許可權,目前java裡的許可權框架有SpringSecurity和Shiro(以前叫做jsecurity),對於SpringSecurity:功能太過強大以至於功能比較分散,使用起來也比較複雜,跟

play框架入門1

2015-06-03 周海漢 2015.6.3 概述: play框架是用scala寫的scala和java的框架,支援高併發,web和JPA。play框架得到一些網際網路新興企業的喜愛,相較spring,struts和hib

基於同城同校的推薦--1

  import mysql.connector conn=mysql.connector.connect(host='',user='',password='',port='',database='') #遠端連線 cursor=conn.cursor() cursor.ex

框架學習1——service層,dao層和service實現類進行資料庫操作

最近也是比較忙,也只能忙裡偷閒地抓緊時間接著學習一下技術,自從上次學習了maven之後,越來越對框架產生了興趣,下了好多的spring視屏,聽著老師的建議,最近也萌生了看別人的程式碼進行學習的想法,然後就上了知乎搜了搜優秀的java框架,發現了一個比較感興趣的,

DWR3.0框架入門1 —— 實現ajax

框架簡介:DWR(Direct Web Remoting)      是一個用於改善web頁面與Java類互動的遠端伺服器端Ajax開源框架,可以幫助開發人員開發包含AJAX技術的網站。它可以允許在瀏覽器裡的程式碼使用執行在WEB伺服器上的JAVA函式,就像它就在瀏覽器裡一