Java?shiro安全框架使用介紹
1.shiro安全框架
Apache Shiro 是一個強大易用的 Java 安全框架,提供了認證、授權(quán)、加密和session會話管理等功能,對于任何一個應用程序,Shiro 都可以提供全面的安全管理服務。并且相對于其他安全框架spring security,Shiro 要簡單的多。
Shiro是apache旗下一個開源框架,它將軟件系統(tǒng)的安全認證相關的功能抽取出來,實現(xiàn)用戶身份認證,權(quán)限授權(quán)、加密、會話管理等功能,組成了一個通用的安全認證框架。
Shiro可以非常容易的開發(fā)出足夠好的應用,其不僅可以用在JavaSE環(huán)境,也可以用在JavaEE環(huán)境。Shiro可以幫助我們完成:認證、授權(quán)、加密、會話管理、與Web集成、緩存等。
1.1 什么是權(quán)限管理
基本上涉及到用戶參與的系統(tǒng)都要進行權(quán)限管理,權(quán)限管理屬于系統(tǒng)安全的范疇,權(quán)限管理實現(xiàn)對用戶訪問系統(tǒng)的控制,按照安全規(guī)則或者安全策略控制用戶可以訪問而且只能訪問自己被授權(quán)的資源。
權(quán)限管理包括用戶身份認證和授權(quán)兩部分,簡稱認證授權(quán)。對于需要訪問控制的資源用戶首先經(jīng)過身份認證,認證通過后用戶具有該資源的訪問權(quán)限方可訪問。
1.2 什么是身份認證
身份認證,就是判斷一個用戶是否為合法用戶的處理過程。最常用的簡單身份認證方式是系統(tǒng)通過核對用戶輸入的用戶名和口令,看其是否與系統(tǒng)中存儲的該用戶的用戶名和口令一致,來判斷用戶身份是否正確。對于采用指紋等系統(tǒng),則出示指紋;對于硬件Key等刷卡系統(tǒng),則需要刷卡。
1.3 什么是授權(quán)
授權(quán),即訪問控制,控制誰能訪問哪些資源。主體進行身份認證后需要分配權(quán)限方可訪問系統(tǒng)的資源,對于某些資源沒有權(quán)限是無法訪問的 .
1.4 認證授權(quán)框架有哪些
shiro框架和spring security框架 這款框架是現(xiàn)在市面比較流行。
2.使用shiro完成認證工作
2.1 shiro中認證的關鍵對象
Subject:主體訪問系統(tǒng)的用戶,主體可以是用戶、程序等,進行認證的都稱為主體;
Principal:身份信息----賬號是主體(subject)進行身份認證的標識,標識必須具有唯一性,如用戶名、手機號、郵箱地址等,一個主體可以有多個身份,但是必須有一個主身份(Primary Principal)。
credential:憑證信息---密碼是只有主體自己知道的安全信息,如密碼、證書等。
2.2 認證流程
2.3 項目代碼
1.先不用數(shù)據(jù)庫來進行身份認證,--我們ini文件,window系統(tǒng)文件,該文件中可以存放賬號和密碼。
(1) 創(chuàng)建一個maven java工程
2.3.1 依賴
<dependency> <groupId>org.apache.shiro</groupId> <artifactId>shiro-core</artifactId> <version>1.9.0</version> </dependency>
2.3.2 創(chuàng)建ini文件
2.3.3 測試代碼
public class Test01 { public static void main(String[] args) { //1.獲取SecurityManager對象 DefaultSecurityManager securityManager=new DefaultSecurityManager(); //2.讀取ini文件 IniRealm iniRealm=new IniRealm("classpath:shiro.ini"); //3。設置securityManager的realm securityManager.setRealm(iniRealm); //4.設置securityManager上下文生效 SecurityUtils.setSecurityManager(securityManager); //5.獲取subject的主體對象 Subject subject=SecurityUtils.getSubject(); try{ //UsernamePasswordToken作用是封裝你輸入的賬號和密碼 是客戶自己輸入的 用來進行比較與realm UsernamePasswordToken token=new UsernamePasswordToken("admin","123456"); //拋出異常 比對shiro中realm和自己的對比,如果一致則登錄成功,不一致則登錄失敗 subject.login(token); System.out.println("登陸成功"); }catch(Exception e){ e.printStackTrace(); System.out.println("登陸失敗"); } } }
2.4 認證的原理
Subject: 主題 登錄信息提交給SecurityManager --->認證器Authenticator---->根據(jù)你的realm提供的數(shù)據(jù)進行相關的認證。 realm---與數(shù)據(jù)源交互的類。
3.授權(quán)
3.1 修改ini文件
3.2 修改代碼
public class Test01 { public static void main(String[] args) { //1.獲取SecurityManager對象 DefaultSecurityManager securityManager=new DefaultSecurityManager(); //2.讀取ini文件 IniRealm iniRealm=new IniRealm("classpath:shiro.ini"); //3。設置securityManager的realm securityManager.setRealm(iniRealm); //4.設置securityManager上下文生效 SecurityUtils.setSecurityManager(securityManager); //5.獲取subject的主體對象 Subject subject=SecurityUtils.getSubject(); try{ //UsernamePasswordToken作用是封裝你輸入的賬號和密碼 是客戶自己輸入的 用來進行比較與realm UsernamePasswordToken token=new UsernamePasswordToken("admin","123456"); //拋出異常 比對shiro中realm和自己的對比,如果一致則登錄成功,不一致則登錄失敗 subject.login(token); System.out.println("登陸成功"); }catch(Exception e){ e.printStackTrace(); System.out.println("登陸失敗"); } System.out.println("=========================登陸后==========================="); boolean authenticated = subject.isAuthenticated(); if(authenticated){ //判斷當前登錄者是否具有user:query權(quán)限 boolean permitted = subject.isPermitted("user:update"); System.out.println(permitted); //從角色角度 boolean role1 = subject.hasRole("role1"); System.out.println(role1); }else { System.out.println("請先認證"); } } }
到此這篇關于Java shiro安全框架使用介紹的文章就介紹到這了,更多相關Java shiro安全框架內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
IDEA?code?template配置和參數(shù)方式
這篇文章主要介紹了IDEA?code?template配置和參數(shù)方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教<BR>2024-01-01淺談Java中replace與replaceAll區(qū)別
這篇文章主要介紹了Java中replace與replaceAll區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-03-03Java實現(xiàn)生產(chǎn)者消費者問題與讀者寫者問題詳解
這篇文章主要介紹了Java實現(xiàn)生產(chǎn)者消費者問題與讀者寫者問題詳解,小編覺得挺不錯的,這里分享給大家,供需要的親朋好友參考。2017-11-11解決Springboot 2 的@RequestParam接收數(shù)組異常問題
這篇文章主要介紹了解決Springboot 2 的@RequestParam接收數(shù)組異常問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-08-08MybatisPlus #{param}和${param}的用法詳解
這篇文章主要介紹了MybatisPlus #{param}和${param}的用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-09-09Java并發(fā)編程中的synchronized關鍵字詳細解讀
這篇文章主要介紹了Java并發(fā)編程中的synchronized關鍵字詳細解讀,在Java早期版本中,synchronized 屬于 重量級鎖,效率低下,這是因為監(jiān)視器鎖(monitor)是依賴于底層的操作系統(tǒng)的Mutex Lock來實現(xiàn)的,Java 的線程是映射到操作系統(tǒng)的原生線程之上的,需要的朋友可以參考下2023-12-12使用Spring Cloud Feign作為HTTP客戶端調(diào)用遠程HTTP服務的方法(推薦)
在Spring Cloud中使用Feign, 我們可以做到使用HTTP請求遠程服務時能與調(diào)用本地方法一樣的編碼體驗,開發(fā)者完全感知不到這是遠程方法,更感知不到這是個HTTP請求,具體內(nèi)容詳情大家參考下本文2018-01-01