1. 程式人生 > >【Shiro】- 基礎入門

【Shiro】- 基礎入門

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

J2SE配置shiro環境的三部曲:

  • 引入ini配置檔案初始化安全管理器工廠
  • 安全管理器工廠構建安全管理器
  • shiro上下文環境配置安全管理器

ini 配置檔案:shiro框架內部維護一個繼承Map的Ini物件,專門負責ini檔案內容的讀取工作 ini檔案內容:

#定義使用者的名字、密碼、角色1、角色2
[users]
root = admin, admin
squirrel = xiaoyang, role1, role2

# -----------------------------------------------------------------------------
# 分配角色的許可權:粗粒度授權模式
[roles]
admin = *  #授予admin所有許可權
role1 = add,delete
role2 = squirrel:update:subject,query

shiro測試類:

package com.zhiwei.shiro.basic;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.*;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;

public class Quickstart {

    public static void main(String[] args) {
    	
    	//引入shiro的ini配置檔案
        Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:com/zhiwei/shiro/basic/shiro.ini");

        //根據ini檔案獲取關聯的安全管理器
        SecurityManager securityManager = factory.getInstance();
        
        //配置shiro環境的安全管理器
        SecurityUtils.setSecurityManager(securityManager);
        
        //shiro分配的主題角色:近似理解使用者
        Subject currentUser = SecurityUtils.getSubject();  

        //-------------測試session內容--------------------
       //如果session不存在則預設建立與Subject繫結的Session域物件
        Session session = currentUser.getSession();  
        
        //設定session的生命週期
        session.setTimeout(60000);                   

         //session的物件儲存操作
		 session.setAttribute("userName", "xiaoyang");
		String value = (String)session.getAttribute("userName");
        if (value.equals("xiaoyang")) {
            System.err.println("--> Session儲存物件:"+value);
        }

        //判斷當前使用者是否經過認證. 
        if (!currentUser.isAuthenticated()) {
           // UsernamePasswordToken token = new UsernamePasswordToken("squirrel", "xiaoyang");
            UsernamePasswordToken token = new UsernamePasswordToken("root", "admin");
            token.setRememberMe(true);
            try {
                currentUser.login(token);  //執行認證操作. 
            } catch (UnknownAccountException uae) {
            	 System.err.println("--> 賬戶不存在: " + token.getPrincipal());
            } catch (IncorrectCredentialsException ice) {
            	 System.err.println("--> 密碼不正確: " + token.getPrincipal());
            } catch (LockedAccountException lae) {
            	 System.err.println("--> 賬戶被鎖定:" + token.getPrincipal());
            }
            catch (AuthenticationException ae) {
            	System.err.println("--> shiro使用者資訊認證異常...............");
            }
        }

        if(currentUser.getPrincipal()!=null)
        System.err.println("--> "+currentUser.getPrincipal() +"成功登陸........");

        //檢查使用者是否有某個許可權:粗粒度許可權控制
        if (currentUser.hasRole("admin")) {
        	System.err.println("--> 當前使用者存在admin管理員許可權............");
        } else {
        	System.err.println("--> 當前使用者無admin管理員許可權");
        }

        //檢查使用者是否可以進行具體的某一個操作.
        //配置時使用的是如下字串: schwartz = lightsaber:* 這表示當前使用者可以對 lightsaber 實體進行任何操作. 
        if (currentUser.isPermitted("add")) {
        	System.err.println("--> 使用者具有add的控制權限............");
        } else {
        	System.err.println("--> 使用者無add的控制權限............");
        }

        //檢查使用者是否可以進行具體的某一個操作. 
        if (currentUser.isPermitted("squirrel:update:subject")) {
        	System.err.println("--> squirrel可以對subject的update操作....");
        } else {
        	System.err.println("squirrel不允許對subject的update操作....");
        }
        //清除安全管理器儲存的subject的相關資訊
        currentUser.logout();  
        //系統強制推出
        System.exit(0);  
    }
}

結果:

相關推薦

Shiro- 基礎入門

浪費了“黃金五年”的Java程式設計師,還有救嗎? >>>   

python基礎入門

1.正則表示式 import re sql="aaa$1bbbbccccc$2sdfsd gps_install_note_id =$3;" regexp=r'\$\d+' # 編譯正則表示式 pattern=re.compile(regexp,re.M) # 從開始位置查詢 match = pat

Shiro入門這篇就夠了Shiro基礎知識、回顧URL攔截

配置文件 硬盤 true 配置 當我 正常 tca 依賴 lar 前言 本文主要講解的知識點有以下: 權限管理的基礎知識 模型 粗粒度和細粒度的概念 回顧URL攔截的實現 Shiro的介紹與簡單入門 一、Shiro基礎知識 在學習Shiro這個框架之前,首先我們要

JAVA零基礎入門系列Day1 開發環境搭建

oracle 零基礎 ati 成功 官方 運行 根目錄 文件目錄 sys 一、安裝JDK java的sdk簡稱JDK ,去其官方網站下載最近的JDK即可。 http://www.oracle.com/technetwork/java/javase/downloads/jdk

JAVA零基礎入門系列Day2 Java集成開發環境IDEA

log rgs string 文件夾 ges jetbrains 技術 http clip 開發環境搭建好之後,還需要一個集成開發環境也就是IDE來進行編程。這裏推薦的IDE是IDEA,那個老掉牙的Eclipse還是先放一邊吧,(手動滑稽)。 IDEA的下載地址:http:

JAVA零基礎入門系列Day3 Java基本數據類型

大小 服務器開發 技術 容易 需求 .html 內存空間 安全性能 com   前兩篇已經將開發環境搭建完成,如果你已經按之前的教程按部就班的完成了部署,那麽世界上最優秀的編程語言之一和世界上最優秀的IDE之一已經出現在你的電腦上(此處應有掌聲),如果你還沒入門,或者正在臺

JAVA零基礎入門系列Day4 變量與常量

聲明變量 初學 不同 常量 此外 程序員 限制 如果 可維護   這一篇主要講解Java中的變量,什麽是變量,變量的作用以及如何聲明,使用變量。   那麽什麽是變量?對於初學者而言,可以將變量理解為盒子,這些盒子可以用來存放數據,不同類型的數據需要放在對應類型的盒子裏。那麽

JAVA零基礎入門系列Day12 Java類的簡單應用

object dsa tle 多行註釋 兩個 內容 ice public 所有   俗話說的好,實踐出真知,所以除了理論知識掌握紮實以外,更重要的是要多加操練,這樣才能掌握核心科技。   今天我們就用剛學會的類來實踐一下,目標便是完成上一篇中的剁手任務。   我們的商品類已

JAVA零基礎入門系列Day13 Java類的繼承與多態

總經理 system 變量賦值 電腦 pub 封裝 java類的繼承 onu def   繼承是類的一個很重要的特性,什麽?你連繼承都不知道?你是想氣死爸爸好繼承爸爸的遺產嗎?(滑稽)   開個玩笑,這裏的繼承跟我們現實生活的中繼承還是有很大區別的,一個類可以繼承另一個類,

JAVA零基礎入門系列Day14 Java對象的克隆

err 所有 引用類型 也會 cnblogs after 還需要 sys 聲明   今天要介紹一個概念,對象的克隆。本篇有一定難度,請先做好心理準備。看不懂的話可以多看兩遍,還是不懂的話,可以在下方留言,我會看情況進行修改和補充。   克隆,自然就是將對象重新復制一份,那為

JAVA零基礎入門系列Day15 對象的比較

nbsp override 法則 屬於 問題 設置 equal 以及 his   最近一直有事,博客也停筆了一段時間,十分抱歉。   這一篇主要講講對象的比較,什麽是對象的比較,我們知道兩個數值類型只需要用“==”符號即可進行相等判斷,但如果是兩個Goods對象呢?如何進行

shiro許可權框架——基礎

shiro是什麼 Apache Shiro是一個強大且易用的Java安全框架,有身份驗證、授權、密碼學和會話管理。使用Shiro的易於理解的API,您可以快速、輕鬆地獲得任何應用程式,從最小的移動應用程式到最大的網路和企業應用程式。 shiro的作用 Shiro 開發團隊稱為“應用程式的四

neo4j圖資料庫基礎入門&案例整理

neo4j有社群版本和企業版。社群版本是免費的,只支援單機版;企業版是付費的,是分散式的。整理了一些不錯的參考資料分享給大家。 neo4j官網:https://neo4j.com/ Cypher是類似SQL的查詢語言,支援做基礎的圖挖掘專案,屬於輕量級。騰訊的QQ、

ShiroApache Shiro架構之身份認證(Authentication)

trac pretty asm 安全保障 軟件測試 釋放 model tac 讀取配置文件 Shiro系列文章: 【Shiro】Apache Shiro架構之權限認證(Authorization) 【Shiro】Apache Shiro架構之集成web

Python基礎知識

數據 文件 專用 一切都 元組 內存 引用傳遞 asc ilo 1. python腳本語言的第一行,目的就是指出,你想要你的這個文件中的代碼用什麽可執行程序去運行它 #!/usr/bin/python 是告訴操作系統執行這個腳本的時候,調用/usr/bin下

Unity基礎知識結構總結

art blog 知識結構 希望 article avi mod 更新 人機交互 前言 本篇以知識結構圖的形式對Unity引擎的經常使用基礎知識內容進行了總結和梳理。 假設你學了一點關於Unity引擎的知識,又認為太雜亂,那麽希望本篇會給你一些幫助。 相應引擎版本號:U

SVM入門(六)線性分類器的求解——問題的轉化,直觀角度

content cli 樣本 image ges 五個 是你 角度 spa SVM入門(六)線性分類器的求解——問題的轉化,直觀角度 讓我再一次比較完整的重復一下我們要解決的問題:我們有屬於兩個類別的樣本點(並不限定這些點在二維空間中)若幹,如圖, 圓形的樣本點定為正樣

SQL- 基礎知識梳理(四) - 存儲過程

var isp spl 更改 option fault 結果 特定 num 存儲過程的概念 存儲過程Procedure是一組為了完成特定功能的SQL語句集合,經編譯後存儲在數據庫中,用戶通過指定存儲過程的名稱並給出參數來執行 存儲過程的好處 A、 存儲過程允許標準組件式編

SQL- 基礎知識梳理(六) - 遊標

test 觸發器 刪除 管理系統 一支 spa eal har str 遊標的概念 結果集,結果集就是select查詢之後返回的所有行數據的集合。 遊標(Cursor): 是處理數據的一種方法。 它可以定位到結果集中的某一行,對數據進行讀寫。 也可以移動遊標定位到你需要的

SQL- 基礎知識梳理(八) - 事務與鎖

隔離性 rep del 數據表 訪問 關系 snapshot 轉換 pro 事務的概念 事務:若幹條T-SQL指令組成的一個操作數據庫的最小執行單元,這個整體要麽全部成功,要麽全部失敗。(並發控制) 事務的四個屬性:原子性、一致性、隔離性、持久性。稱為事務的ACID特性。