Shiro框架從入門到實戰程式碼(一)Shiro簡介和基礎應用
一:Shiro是一個功能強大且易於使用的Java安全框架,提供了認證,授權,加密和會話管理。
Authentication:身份認證/登入,驗證使用者是不是擁有相應的身份
Authorization:授權,即許可權驗證,驗證某個已認證的使用者是否擁有某個許可權,即判斷使用者是否能做事情,常見的如:
驗證某個使用者是否擁有某個角色,或者細粒度的驗證某個使用者對某個資源是否具有某個許可權
Session Manager:會話管理,即使用者登入後就是一次會話,在沒有退出之前,它的所有的資訊都在會話中,會話可以是普通JavaSe環境的,也可以是web環境的
Cryptography:加密,保護資料的安全性,如密碼加密儲存到資料庫,而不是明文儲存
Shiro有三大核心元件:
Subject:當前使用者,在許可權管理的應用程式裡往往需要知道誰能夠操作什麼,誰擁有操作該程式的權利,shiro中
則需要通過Subject來提供基礎的當前使用者資訊,所有的Subject都要繫結到SecurityManager上,與Subject的互動實際上是被轉換成與SecurityManager的互動
SecurityManager:即所有Subject的管理者,可以看作是Shiro框架的全域性管理元件,用於排程各種Shiro框架的服務,作用類似於SpringMVC中的DispatcherServlet,用於攔截所有請求並進行處理
Realm:是使用者的資訊認證器和使用者的許可權認證器,我們需要自己實現Realm來自定義的管理我們自己系統內部的許可權規則,SecurityManager要驗證使用者,需要從Realm中獲取使用者,可以把Realm看作是資料來源
三者之間的聯絡:
一個簡單的shiro應用是,應用程式碼通過Subject來進行認證和授權,而Subject又委託給SecurityManager
我們需要給Shiro的SecurityManager注入Realm,從而讓SecurityManager能得到合法的使用者及其許可權進行判斷
Authenticator:認證器,負責主體認證的
Authrizer:授權器
public class ShiroTest {
public static void main(String[] args) {
Factory<SecurityManager> factory =
new IniSecurityManagerFactory("classpath:shiro.ini");
//要指定讀取的配置檔案,返回的是一個Factory物件
SecurityManager securityManager = factory.getInstance();
//呼叫Factory的getInstance()方法獲得SecurityManager
SecurityUtils.setSecurityManager(securityManager);
//通過SecurityUtils的setSecurityManager把SecurityManager繫結到上下文中
Subject subject = SecurityUtils.getSubject();
//獲得與當前系統進行互動的物件
UsernamePasswordToken token = new UsernamePasswordToken("test", "000000");
try {
subject.login(token);//登入操作
if (subject.isAuthenticated()) {
System.out.println("登入成功");
if (subject.hasRole("admin")) {
System.out.println("有admin角色");
} else {
System.out.println("沒有admin角色");
}
if(subject.isPermitted("search")){
System.out.println("有search許可權");
}else{
System.out.println("沒有search許可權");
}
if(subject.isPermittedAll("del","update")){
System.out.println("有\"del\",\"update\"許可權");
}else{
System.out.println("沒有\"del\",\"update\"許可權");
}
}
} catch (AuthenticationException e) {
//e.printStackTrace();
System.out.println("使用者名稱或密碼錯誤,登入失敗");
}
}
}
相關推薦
Shiro框架從入門到實戰程式碼(一)Shiro簡介和基礎應用
一:Shiro是一個功能強大且易於使用的Java安全框架,提供了認證,授權,加密和會話管理。 Authentication:身份認證/登入,驗證使用者是不是擁有相應的身份 Authorization:授權,即許可權驗證,驗證某個已認證的使用者是否擁有某個許可
TensorFlow 從入門到精通(一):安裝和使用
安裝過程 目前較為穩定的版本為 0.12,本文以此為例。其他版本請讀者自行甄別安裝步驟是否需要根據實際情況修改。 TensorFlow 支援以下幾種安裝方式: PIP 安裝 原始碼編譯安裝 Docker 映象安裝 PIP 安裝
LINQ學習心得分享----(一)LINQ簡介和基礎學習
第二個問題,LINQ主要解決什麼問題?也就是LINQ的設計目的。我們知道在LINQ之前,面向物件和資料訪問這兩個領域是相互分裂的,程式語言中的資料型別,和資料庫中的資料型別也有一些出入,同時SQL和XML都有自己的查詢語言而物件卻沒有自己的查詢語言,這些在很大程度上限制開發的效率,而LINQ的設計理
JavaScript 從入門到放棄(一)事件委托和使用innerHTML添加元素
ont ntb innerhtml col 添加元素 pan div 基本 開發 一、使用事件委托 一個簡單的需求,比如想給ul下面的li加上點擊事件,點擊哪個li,就顯示那個li的innerHTML。這個貌似很簡單!代碼如下! <!DOCTYPE html>
反射從入門到精通(一)
輸出結果 reflect file 加載器 mysql 構造 app throw 檢查 1. 三個類加載器 BootStrap類加載器【boot】 用於加載 jre:lib下的jar包【.class文件】 Java提供的大多數類都在此 Exetension類加載器【
jQuery EasyUI快速入門實戰教程(一)-入門
jquery javascript easyui 1、jQuery EasyUI概述jQuery EasyUI是一組基於jQuery的UI插件集合體,而jQuery EasyUI的目標就是幫助web開發者更輕松的打造出功能豐富並且美觀的UI界面。開發者不需要編寫復雜的javascript,也不需要
linux從入門到精通(一)
scp 我的電腦 test 修改 linux 改名 人性 -- ces 1. 虛擬機的安裝 2. 虛擬機設置 註: 如果選擇的是NAT模式 匹配的網卡是: 通過這個虛擬的網卡與本機進行通信,只能與本機進行通信,如果本機可以訪問互聯網,該虛擬機也可以訪問互
javascript從入門到精通(一)
png var 技術 date 入門 logs function con undefine 1. heap:堆 引用值stack: 棧 先進後出 裏面的值是copy的關系 不可改變的原始值:Number String Boolean undefined null
MAC OS開發之從入門到崩潰(一)
bsp 運行 shee 相關 .com nsh 彈出 add 區域 本文目標:通過xcode,創建一個Mac app程序。點擊按鈕,彈出Hello World窗口,其效果如下。 我們可以通過4個步驟來實現如上效果。 1.創建一個MAC app工程項目。 2.布局“按鈕”
node.js從入門到放棄(一)
主鍵 data timestamp insert 代碼 了解 javascrip ice where 以下內容全是我個人理解寫出,如有不對,請立刻練習本人進行更改。以免被剛入門的被我帶入坑裏。 —node是什麽?我想大家應該都知道。 node是前端未來幹掉後
python-類-從入門到精通(一)
0.什麼是類 類(Class)是面向物件程式設計(OOP,Object-Oriented Programming)實現資訊封裝的基礎。類是一種使用者定義型別,也稱類型別。每個類包含資料說明和一組操作資料或傳遞訊息的函式。類的例項稱為物件。 面向物件程式設計是最有效的軟體編寫方法之一。在面向物
Python爬蟲入門實戰系列(一)--爬取網路小說並存放至txt檔案
執行平臺: Windows Python版本: Python3.x 一、庫檔案
Matlab從入門到精通(一)
1、查詢與刪除記憶體變數 在指令視窗(Command Window)中執行who、whos查詢MATLAB的記憶體變數.這兩個指令的差別僅在於獲取記憶體變數資訊的簡單和詳細程度不同. clear &
Spark從入門到精通(一)
什麼是Spark 大資料計算框架 離線批處理 大資料體系架構圖(Spark) Spark包含了大資料領域常見的各種計算框架:比如Spark Core用於離線計算,Spark SQL用於互動式查詢,Spark Streaming用於實時流式計算,Spark MLib用於機器學習,Spark
Docker 從入門到放棄(一)安裝
前言 Docker 是一個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,然後釋出到任何流行的Linux機器上,也可以實現虛擬化,容器是完全使用沙箱機制,相互之間不會有任何介面。 Docker採用 C/S架構 Docker daemon 作為服務端接受來自客戶的請求
SpringBoot從入門到熟悉(一)快速入門
簡介 相信在你第1次接觸和學習Spring框架的時候,就已經為其及其繁瑣的配置過程而退卻了?在你第n次使用Spring框架的時候,是否覺得一堆反覆黏貼的配置有一些厭煩?那麼您就不妨來試試使用Spring Boot來讓你更易上手,更簡單快捷地構建Spring應用!
springboot從入門到精通(一)
需要 ati works thymeleaf run work jpa ring 無需 springboot到底有什麽好處?有什麽優勢?這個先不用看,我們只要知道它有很多優勢,現在要做的事只有一件,那就是擼代碼!擼完就知道有多少料! 首先,在案例中,我們會構建一個英雄列表
Java演算法從入門到精通(一)
認識時間複雜度 常數時間的操作:一個操作如果和資料量沒有關係,每次都是 固定時間內完成的操作,叫做常數操作。 時間複雜度為一個演算法流程中,在最差的資料情況下,常數運算元量的指標。常用O (讀作big O)來表示。具體來說,在常數運算元量的表示式中, 只要
海思Hi3519A MPP從入門到精通(一)
1. 概述 海思提供的媒體處理軟體平臺(Media Process Platform,簡稱 MPP),可支援應用軟體快速 開發。該平臺對應用軟體遮蔽了晶片相關的複雜的底層處理,並對應用軟體直接提供 MPI(MPP Program Interface)介面完成相應功能。該平臺支援應用軟體快速開發以
Go從入門到精通(一)go語言初識
一、第一個go程式package main import ( "fmt" ) func main(){ fmt.Println("hello world") }對於程式碼的解釋如果是為了將程式碼編譯成一個可執行程式,那麼package必須是m