shrio----(1)基礎

文章目錄

    • 前言
  • 一、Shrio
    • 1、什么是shiro
    • 2、為什么使用shrio
  • 二、主要類
    • 2.1、Subject
    • 2.2、SecurityManager
    • 2.3、Realms
  • 三、認證授權
  • 3.1、認證(Authentication)
  • 3.2、授權(authorization)
  • 四、入門示例
  • 參考文章


前言

簡單入門介紹

一、Shrio

http://shiro.apache.org/

1、什么是shiro

Apache Shiro?(trademark)是一個功能強大且易于使用的Java安全框架,用于執行身份驗證,授權,加密和會話管理。使用Shiro易于理解的API,您可以快速輕松地保護任何應用程序-從最小的移動應用程序到最大的Web和企業應用程序。

2、為什么使用shrio

易于使用 -易于使用是該項目的最終目標。應用程序安全性可能非常令人困惑和沮喪,并被視為“必要的邪惡”。如果您使它易于使用,以使新手程序員可以開始使用它,那么就不必再痛苦了。

全面 -Apache Shiro聲稱沒有其他具有范圍廣度的安全框架,因此它很可能是滿足安全需求的“一站式服務”。

靈活 -Apache Shiro可以在任何應用程序環境中工作。盡管它可以在Web,EJB和IoC環境中運行,但并不需要它們。Shiro也不要求任何規范,甚至沒有很多依賴性。

具有Web功能 -Apache Shiro具有出色的Web應用程序支持,允許您基于應用程序URL和Web協議(例如REST)創建靈活的安全策略,同時還提供一組JSP庫來控制頁面輸出。

可插拔 -Shiro干凈的API和設計模式使它易于與許多其他框架和應用程序集成。您會看到Shiro與Spring,Grails,Wicket,Tapestry,Mule,Apache Camel,Vaadin等框架無縫集成。

支持 -Apache Shiro是Apache Software Foundation(Apache軟件基金會)的一部分,該組織被證明以其社區的最大利益行事。項目開發和用戶群體友好的公民隨時可以提供幫助。如果需要,像Katasoft這樣的商業公司也可以提供專業的支持和服務。
在這里插入圖片描述

二、主要類

2.1、Subject

import org.apache.shiro.subject.Subject;
import org.apache.shiro.SecurityUtils;
Subject currentUser = SecurityUtils.getSubject();

Subject一詞是一個安全術語,基本上表示“當前正在執行的用戶”。它只是意味著“當前正在與軟件交互的東西”。它只是不被稱為“用戶”,因為“用戶”一詞通常與人類相關聯。在安全的世界,術語“主題”可以指一個人,但也有會談進程,守護進程帳戶,或任何類似。

2.2、SecurityManager

主題的“幕后”對應對象是SecurityManager。主題代表當前用戶的安全操作,而SecurityManager管理所有用戶的安全操作。它是Shiro體系結構的核心,并充當一種“傘”對象,引用了許多內部嵌套的安全組件,這些安全組件構成了一個對象圖。它管理著所有 Subject、且負責進行認證和授權、及會話、緩存的管理。每個應用程序幾乎總是有一個SecurityManager實例。它本質上是一個應用程序單例(盡管不必是靜態單例)普通的Java代碼,Spring XML,YAML,.properties和.ini文件等進行配置

ini文件方式,實例化SecurityManager 配置:
#CredentialsMatcher 認證匹配器
cm = org.apache.shiro.authc.credential.HashedCredentials

Matcher
cm.hashAlgorithm = SHA-512
cm.hashIterations = 1024
#Base64 encoding (less text):
cm.storedCredentialsHexEncoded = false

[users]

jdoe = TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJpcyByZWFzb2
asmith = IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbXNoZWQsIG5vdCB

[roles]

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.util.Factory;

// 1。加載INI配置
Factory factory =
new IniSecurityManagerFactory(“ classpath:shiro.ini”);

// 2。創建SecurityManager
SecurityManager securityManager = factory.getInstance();

// 3。使它可訪問
SecurityUtils.setSecurityManager(securityManager);

2.3、Realms

Realms充當Shiro與應用程序的安全數據之間的“橋梁”或“連接器”,也就是說,當需要真正與安全性相關的數據(例如用戶帳戶)進行交互以執行身份驗證(登錄)和授權(訪問控制)時,Shiro會從為應用程序配置的一個或多個Realms中查找其中的許多內容。本質上是特定于安全性的DAO:它封裝了數據源的連接詳細信息,并根據需要使關聯數據可用于Shiro。

#數據源
dataSource=org.apache.commons.dbcp.BasicDataSource
#數據源鏈接要素
dataSource.driverClassName=oracle.jdbc.driver.OracleDriver
dataSource.url=jdbc:oracle:thin:@localhost:1521:orcl
dataSource.username=scott
dataSource.password=tiger
#jdbcrealm
jdbcrealm=org.apache.shiro.realm.jdbc.JdbcRealm
#jdbcrealm需要用到的數據源
jdbcrealm.dataSource=KaTeX parse error: Expected 'EOF', got '#' at position 13: dataSource #?開啟查找權限 jdbcrea…jdbcrealm

三、認證授權

3.1、認證(Authentication)

身份驗證是驗證用戶身份的過程。也就是說,當用戶通過應用程序進行身份驗證時,他們在證明自己實際上就是他們所說的身份。有時也稱為“登錄”。這通常是一個三步過程。

  1. 收集用戶的標識信息(稱為主體 用戶名)和支持身份的憑證(稱為憑據 密碼)。
    AuthenticationToken token = new UsernamePasswordToken(username, password);
  2. 將主體和憑據提交到系統。
    Subject currentUser = SecurityUtils.getSubject();
    currentUser.login(token);
  3. 如果提交的憑據與系統對該用戶身份的期望匹配,則認為該用戶已通過身份驗證。如果它們不匹配,則不認為用戶已通過身份驗證。
    try {
    currentUser.login(token);
    //通過身份驗證,執行其他業務
    } catch (IncorrectCredentialsException ice) {
    //密碼錯誤
    } catch (LockedAccountException lae) {
    //賬戶鎖定(默認系統不提供,可以編寫代碼過程中自己實現)
    }
    … //許多其他異常
    catch (AuthenticationException ae) {
    //上面配置的異常的父類
    }

3.2、授權(authorization)

授權本質上是訪問控制-控制用戶可以在應用程序中訪問的內容(例如資源,網頁等)。大多數用戶通過使用角色和權限等概念來執行訪問控制。也就是說,通常根據分配給他們的角色和/或權限,允許用戶執行某項操作或不執行某項操作。
判斷角色:
if ( subject.hasRole(“administrator”) ) {
//show the ‘Create User’ button
} else {
//grey-out the button?
}
判斷權限:
if ( subject.isPermitted(“user:create”) ) {
//show the ‘Create User’ button
} else {
//grey-out the button?
}

四、入門示例

參考文章

個人筆記,不同意見,望有交流
直接可以點擊跳轉連接

作者

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/166682.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/166682.shtml
英文地址,請注明出處:http://en.pswp.cn/news/166682.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【譯】Spring 6 入參數據校驗: 綜合指南

一、前言 在 Spring 6.1 中,有一個非常值得注意的重要改進——編程式驗證器實現。Spring 長期以來一直通過注解支持聲明式驗證,而 Spring 6.1 則通過提供專用的編程式驗證方法引入了這一強大的增強功能。 編程式驗證允許開發人員對驗證過程進行細粒度控…

網站定制開發有哪些分類?|企業軟件app小程序定制

網站定制開發有哪些分類?|企業軟件app小程序定制 網站定制開發是指根據客戶需求,為其量身定制設計和開發的網站服務。目前,網站定制開發主要分為以下幾個分類: 1. 靜態網站定制開發:靜態網站是由HTML、CSS和JavaScrip…

手寫promise(3)-- 實例方法 靜態方法

目錄 實例方法 catch finally 靜態方法 reslove reject race all allSettled any 實例方法 提供給promise實例的方法 包括catch 與finally catch Promise 實例的 catch() 方法用于注冊一個在 promise 被拒絕時調用的函數。它會立即返回一個等效的 Promise 對象&…

一文詳解 requests 庫中 json 參數和 data 參數的用法

在requests庫當中,requests請求方法,當發送post/put/delete等帶有請求體的請求時,有json和data2個參數可選。 眾所周知,http請求的請求體格式主要有以下4種: application/json applicaiton/x-www-from-urlencoded …

java堆文件排查

技術主題 在之前的開發的一個項目中,因為程序的一個bug,導致一些引用的對象一直沒有回收,從而導致堆內存一直在增大,老年代一直在增大,老年代進行堆積,后來的排查思路是通過dump堆的文件,然后對…

Dockerfile-CentOS7.9+Python3.11.2

本文為CentOS7.9下安裝Python3.11.2環境的Dockerfile # CentOS with Python3.11.2 # Author xxmail.com# build a new image with basic centos FROM centos:centos7.9.2009 # who is the author MAINTAINER xxmail.comRUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/…

vue的生命周期及不同階段狀態可以進行的行為

什么是vue的生命周期? Vue 的實例從創建到銷毀的過程 ,就是生命周期 ,也就是從開始創建 ,初始化數據 ,編譯模板 ,掛載Dom到渲染DOM ,更新數據再到渲染 ,卸載等一系列的過程 &#x…

OpenAI研發神秘“Q*”模型:科學家認輸,AI贏了人類關鍵一戰

圖片來源:視覺中國 作者丨葉蓁 編輯丨康曉 出品丨深網騰訊新聞小滿工作室 在山姆奧特曼(Sam Altman)被OpenAI前董事會突然罷免之前,數位研究人員向董事會發送了一封信,警告稱他們發現了一種能夠威脅到人類的強大人工…

IIS 基線安全加固操作

目錄 賬號管理、認證授權 ELK-IIS-01-01-01 ELK-IIS-01-01-02 ELK-IIS-01-01-03 ELK-IIS-01-01-04 日志配置 ELK-IIS-02-01-01 ELK-IIS-02-01-02 ??????? ELK-IIS-02-01-03 通信協議 ELK-IIS-03-01-01 設備其他安全要求 ELK-IIS-04-01-01 ??????? ELK-I…

【DDS】OpenDDS配置與使用

😏★,:.☆( ̄▽ ̄)/$:.★ 😏 這篇文章主要介紹OpenDDS配置與使用。 無專精則不能成,無涉獵則不能通。——梁啟超 歡迎來到我的博客,一起學習,共同進步。 喜歡的朋友可以關注一下,下次更…

華為云編譯構建CodeArts Build常見問答匯總

1.【Build】公有云編譯構建是否支持導入外部機器做執行機 答:參考鏈接:https://support.huaweicloud.com/usermanual-devcloud/devcloud_01_0017.html ? 使用代理機功能,需要配備1臺4U8G或以上規格、磁盤>80GB的主機。 ? 安裝代理的…

Ubuntu 啟用 root 用戶

在啟用 root 用戶之前,我們先來了解一下, ubuntu 命令的組成。 打開 ubuntu 的終端,現在的命令行是由 topeetubuntu:~$ 這幾個字母組成,那么這幾個字母都代表 什么意思呢? topeet …

配電室智慧運維監控系統

配電室智能運維監控系統是一個綜合性的管理系統,專門針對配電室的運維工作進行設計。依托電易云-智慧電力物聯網,它融合了先進的監測技術、自動化技術、數據分析技術等,對配電室進行全方位、實時的智能化監控和管理,以提升配電室運…

人工智能對當代生活的影響

人工智能(AI)是指通過模擬人類智能的方式,使機器能夠執行某些需要智能的任務。隨著技術的快速發展和應用的廣泛推廣,人工智能已經深入到我們的日常生活中,對我們的生活和社會產生了深遠的影響。本文將探討人工智能對當…

Django同時連接多種數據庫

我的使用場景需要同時連接達夢數據庫和MYSQL數據庫,有的功能需要查詢達夢,有的功能則需要查詢MYSQL。 第一步:在 Django 的 settings.py 文件中,配置多個數據庫連接。你可以在 DATABASES 字典中添加多個數據庫配置。每個數據庫配置…

關于 Google AMP 和 SEO

Google 于 2015 年首次推出 AMP,即加速移動頁面。借助開源 AMP 框架,網頁設計師可以制作快速加載的移動網頁。該框架的創建是為了應對使用移動設備訪問互聯網的個人數量的增加。從那時起,谷歌一直在推動使用 AMP 來增強移動設備上的 SEO 和用…

【漏洞復現】好視通視頻會議系統(fastmeeting) toDownload.do接口存在任意文件讀取漏洞 附POC

漏洞描述 “好視通”是國內云視頻會議知名品牌,擁有多項創新核心技術優勢、多方通信服務牌照及行業全面資質 [5] ,專注為政府、公檢法司、教育、集團企業等用戶提供“云+端+業務全場景”解決方案。用全國產、高清流暢、安全穩定的云視頻服務助力各行各業數字化轉型。 其視頻…

opencv-Meanshift 和 Camshift 算法

MeanShift 和 CamShift 都是用于目標跟蹤的算法,基于顏色直方圖的方法。它們主要用于在視頻序列中追蹤運動的對象。 MeanShift(均值漂移): 原理: MeanShift 算法的基本思想是通過不斷調整窗口的中心,使得窗口中的樣本點的平均值向…

介紹正則表達式及其用法

正則表達式(Regular Expression),簡稱為"正則",是一種用于描述、匹配、搜索文本的方式。正則表達式通常由符號和字符組成,可以用于匹配和搜索特定模式的文本。 以下是一些常用的正則表達式元字符及其用法&am…