許可權框架 - shiro 授權demo

来源:http://www.cnblogs.com/leechenxiang/archive/2016/06/23/5612091.html
-Advertisement-
Play Games

之前說了許可權認證,其實也就是登錄驗證身份 這次來說說shiro的授權 shiro可以針對角色授權,或者訪問資源授權 兩者都行,但是在如今的複雜系統中,當然使用後者,如果你是小系統或者私活的話,前者即可,甚至可以不用,我懂的 好吧,上代碼: 首先新建一個ini,登陸信息以及許可權配置好 以下代碼先登陸, ...


之前說了許可權認證,其實也就是登錄驗證身份

這次來說說shiro的授權

shiro可以針對角色授權,或者訪問資源授權

兩者都行,但是在如今的複雜系統中,當然使用後者,如果你是小系統或者私活的話,前者即可,甚至可以不用,我懂的

好吧,上代碼:

首先新建一個ini,登陸信息以及許可權配置好

 1 #用戶
 2 [users]
 3 #eric 用戶nathan的密碼是123456,擁有boss以及hr兩個許可權
 4 eric=123456,boss,hr
 5 merry=123456,hr
 6 
 7 #許可權
 8 [roles]
 9 #角色對用資源user來說擁有create以及update許可權
10 boss=user:create,user:update
11 #角色對用資源user來說擁有create以及delete許可權
12 hr=user:create,user:delete
13 #角色對用資源user來說擁有create許可權
14 tl=user:create

 

 

以下代碼先登陸,後授權,分為角色以及資源

 1 @Test
 2     public void testAuthorization() {
 3 
 4         // 創建SecurityManager工廠
 5         Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro/shiro-permission.ini");
 6         // 創建SecurityManager
 7         SecurityManager securityManager = factory.getInstance();
 8         // 將SecurityManager設置到系統運行環境,和spring後將SecurityManager配置spring容器中,一般單例管理
 9         SecurityUtils.setSecurityManager(securityManager);
10         // 創建subject
11         Subject subject = SecurityUtils.getSubject();
12         // 創建token令牌
13         UsernamePasswordToken token = new UsernamePasswordToken("eric", "123456");
14         // 執行認證
15         try {
16             subject.login(token);
17         } catch (AuthenticationException e) {
18             e.printStackTrace();
19         }
20         System.out.println("認證狀態:" + subject.isAuthenticated());
21         // 認證通過後執行授權
22 
23         // 基於角色的授權
24         // hasRole傳入角色標識
25         boolean ishasRole = subject.hasRole("hr");
26         System.out.println("單個角色判斷" + ishasRole);
27         // hasAllRoles是否擁有多個角色
28         boolean hasAllRoles = subject.hasAllRoles(Arrays.asList("boss", "hr", "tl"));
29         System.out.println("多個角色判斷" + hasAllRoles);
30 
31         // 使用check方法進行授權,如果授權不通過會拋出異常
32         // subject.checkRole("employee");
33 
34         // 基於資源的授權
35         // isPermitted傳入許可權標識符
36         boolean isPermitted = subject.isPermitted("user:create:1");
37         System.out.println("單個許可權判斷" + isPermitted);
38 
39         boolean isPermittedAll = subject.isPermittedAll("user:create:1",
40                 "user:delete");
41         System.out.println("多個許可權判斷" + isPermittedAll);
42 
43         // 使用check方法進行授權,如果授權不通過會拋出異常
44         subject.checkPermission("items:create:1");
45 
46     }

 

這些都是簡單的配置

過後會講講如何配合springmvc spring 以及mybatis進行動態認證授權


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 字元串APPAPT中包含了兩個單詞“PAT”,其中第一個PAT是第2位(P),第4位(A),第6位(T);第二個PAT是第3位(P),第4位(A),第6位(T)。 現給定字元串,問一共可以形成多少個PAT? 輸入格式: 輸入只有一行,包含一個字元串,長度不超過105,只包含P、A、T三種字母。 輸出 ...
  • Any 前面已經有兩次提到過:在scala中,Any類是所有類的超類。 Any有兩個子類:AnyVal和AnyRef。對應Java直接類型的scala封裝類,如Int、Double等,AnyVal是它們的基類;對應引用類型,AnyRef是它們的基類。 scala中,所有類的關係可以用下麵這張圖大致描... ...
  • 昨天通過幾個小程式以及Hangout源碼學習了CLI的基本使用,今天就來嘗試翻譯一下CLI的官方使用手冊。 下麵將會通過幾個部分簡單的介紹CLI在應用中的使用場景。 昨天已經聯繫過幾個基本的命令行參數使用場景, "可以參考這裡" 通過使用Apache Commons CLI可以幫助開發者快速構建命令 ...
  • 本文以序列長度20的{ 7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};以及頁面4;為例; 結果: ...
  • 題目 輸入某二叉樹的前序遍歷和中序遍歷,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含有重覆的數字。 例如,前序遍歷序列:{1,2,3,7,3,5,6,8},中序遍歷序列:{4,7,2,1,5,3,8,6} 答案 前序遍歷: 前序遍歷首先訪問根結點然後遍歷左子樹,最後遍歷右子樹。在遍歷 ...
  • view剩餘代碼 ...
  • 2016年6月22日,第一款開源免費的完整支持PHP 7版本的IDE PDT 4終於發佈。原本我是期望Netbeans 8.2的,但PDT 4.0 發佈,就等不及了。 PDT團隊很高興的宣佈PDT新版本 4.0發佈: 這是一個大版本的發佈,它做了巨大的性能改進。修複了100個bug: 完整支持PHP ...
  • 題外話:該分頁顯示是用 “表示層-控制層-DAO層-資料庫”的設計思想實現的,有什麼需要改進的地方大家提出來,共同學習進步。 思路:首先得在 DAO 對象中提供分頁查詢的方法,在控制層調用該方法查到指定頁的數據,在表示層通過 EL 表達式和 JSTL 將該頁數據顯示出來。 重點:兩個方法:(1)計算 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...