成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

還在親手寫(xiě)Filter進(jìn)行權(quán)限校驗(yàn)?嘗試一下Shiro吧

開(kāi)發(fā) 架構(gòu)
在實(shí)踐中,發(fā)現(xiàn)很多朋友雖然在使用Shiro,但貌似對(duì)其并不了解,甚至有的項(xiàng)目還在使用filter來(lái)實(shí)現(xiàn)權(quán)限管理,而網(wǎng)絡(luò)上相關(guān)教程又比較古老。因此,決定為大家更新這么一個(gè)關(guān)于Shiro的系列教程,最后會(huì)整理成冊(cè),分享給大家。

[[377360]]

 本文轉(zhuǎn)載自微信公眾號(hào)「程序新視界」,作者丑胖俠二師兄。轉(zhuǎn)載本文請(qǐng)聯(lián)系程序新視界公眾號(hào)。  

在實(shí)踐中,發(fā)現(xiàn)很多朋友雖然在使用Shiro,但貌似對(duì)其并不了解,甚至有的項(xiàng)目還在使用filter來(lái)實(shí)現(xiàn)權(quán)限管理,而網(wǎng)絡(luò)上相關(guān)教程又比較古老。因此,決定為大家更新這么一個(gè)關(guān)于Shiro的系列教程,最后會(huì)整理成冊(cè),分享給大家。

如果你也想深入學(xué)習(xí)一下Shiro框架,那么關(guān)注一下公眾號(hào)“程序新視界”,可及時(shí)獲取最新的文章,等本系列更新完畢會(huì)也會(huì)第一時(shí)間整理成電子版文檔分享給大家。第一篇,給大家科普一些基礎(chǔ)概念,下面開(kāi)始正文。

前言

權(quán)限管理是每個(gè)系統(tǒng)不可缺少的,它隸屬于系統(tǒng)安全的范疇,實(shí)現(xiàn)對(duì)用戶訪問(wèn)系統(tǒng)的控制,按照指定的安全策略控制用戶對(duì)資源的訪問(wèn)。

權(quán)限管理通常包括用戶身份認(rèn)證和授權(quán)兩部分,簡(jiǎn)稱(chēng)認(rèn)證授權(quán)。對(duì)于需要訪問(wèn)控制的資源,需先進(jìn)行用戶身份認(rèn)證,認(rèn)證通過(guò)后用戶具有該資源的訪問(wèn)權(quán)限便可進(jìn)行訪問(wèn)。

針對(duì)權(quán)限管理,在Java體系中,常見(jiàn)的權(quán)限框架有Shiro和Spring Security,當(dāng)然在一些簡(jiǎn)單或古老的系統(tǒng)中可能還在用手寫(xiě)的filter來(lái)進(jìn)行權(quán)限的管理和控制。本文先從Shiro的功能、組件、架構(gòu)等方面來(lái)帶大家了解一下Shiro框架。

Shiro簡(jiǎn)介

Apache Shiro是一個(gè)強(qiáng)大且易用的Java安全框架,執(zhí)行身份驗(yàn)證、授權(quán)、密碼和會(huì)話管理。與之相對(duì)應(yīng)的便是Spring Security,但在大多數(shù)項(xiàng)目中開(kāi)發(fā)人員更愿意使用Shiro來(lái)管理權(quán)限。

主要原因是使用起來(lái)比較簡(jiǎn)單,而Spring Security相對(duì)來(lái)說(shuō)更重量級(jí)一些,學(xué)習(xí)曲線比較陡峭,而實(shí)際環(huán)境中也并不需要Spring Security那么多功能。所以,一般情況下,使用Shiro便足夠了。

Shiro可以快速、輕松的運(yùn)用于任何應(yīng)用程序中,從最小的移動(dòng)應(yīng)用程序到最大的網(wǎng)絡(luò)和企業(yè)應(yīng)用程序。

Shiro能做什么

Shiro提供了以下功能:認(rèn)證(Authentication)、授權(quán)(Authorization)、加密(Cryptography)、Session管理(Session Management)、Web集成(Web Support)、緩存(Caching)等??捎糜诒Wo(hù)任何應(yīng)用程序:從命令行應(yīng)用程序、移動(dòng)應(yīng)用程序到最大的Web和企業(yè)應(yīng)用程序。

關(guān)于Shiro的核心功能,官方提供了下圖:

使用Shiro我們可以實(shí)現(xiàn)以下功能:

  • 用戶認(rèn)證;
  • 用戶訪問(wèn)控制:判斷用戶是否擁有特定的角色;判斷用戶是否可執(zhí)行某個(gè)操作;
  • 在任何環(huán)境下使用Session API,即使在Web或EJB容器之外的應(yīng)用;
  • 可在認(rèn)證、訪問(wèn)控制和會(huì)話期間,對(duì)事件做出響應(yīng);
  • 匯總一個(gè)或多個(gè)用戶安全數(shù)據(jù)的數(shù)據(jù)源,并將其全部顯示為單個(gè)復(fù)合用戶“視圖”;
  • 支持單點(diǎn)登錄(SSO)功能;
  • 支持登錄時(shí)的“記住”功能;
  • 其他應(yīng)用程序;

Shiro特點(diǎn)

Shiro的目標(biāo)是:在各類(lèi)應(yīng)用(從命令行到大型企業(yè)應(yīng)用)中,做到不依賴(lài)其他三方框架、容器或應(yīng)用程序本身的依賴(lài),可以在任何環(huán)境中直接使用。同時(shí)它又具有以下特點(diǎn):

  • 易于理解的Java Security API;
  • 簡(jiǎn)單的身份認(rèn)證(登錄),支持多種數(shù)據(jù)源(LDAP,JDBC,Kerberos,ActiveDirectory 等);
  • 對(duì)角色的簡(jiǎn)單的簽權(quán)(訪問(wèn)控制),支持細(xì)粒度的簽權(quán);
  • 支持一級(jí)緩存,以提升應(yīng)用程序的性能;
  • 內(nèi)置的基于POJO企業(yè)會(huì)話管理,適用于Web以及非Web的環(huán)境;
  • 異構(gòu)客戶端會(huì)話訪問(wèn);
  • 非常簡(jiǎn)單的加密 API;
  • 不跟任何的框架或者容器捆綁,可以獨(dú)立運(yùn)行;

Shiro各模塊功能

結(jié)合下圖,我們來(lái)細(xì)化一下Shiro各個(gè)模塊對(duì)應(yīng)的功能:

Authentication:身份認(rèn)證/登錄,驗(yàn)證用戶是不是擁有相應(yīng)的身份;

Authorization:授權(quán),即權(quán)限驗(yàn)證。驗(yàn)證某個(gè)用戶是否有操作某個(gè)功能的權(quán)限。如:驗(yàn)證用戶是否擁有某個(gè)角色、是否有操作某個(gè)資源的權(quán)限;

Session Management:Session管理,存儲(chǔ)用戶登錄信息于會(huì)話當(dāng)中,支持Web環(huán)境和非Web環(huán)境;

Cryptography:加密數(shù)據(jù),并保持易用性,比如密碼加密后存儲(chǔ)到數(shù)據(jù)庫(kù);

Web Support:Web支持,可以方便的集成到Web環(huán)境;

Caching:緩存,比如用戶登錄后,對(duì)用戶信息、角色/權(quán)限進(jìn)行緩存;

Concurrency:Shiro支持多線程場(chǎng)景下的并發(fā)驗(yàn)證,即如在一個(gè)線程中開(kāi)啟另一個(gè)線程,能把權(quán)限自動(dòng)傳播過(guò)去;

Testing:提供測(cè)試支持;

Run As:允許一個(gè)用戶假裝為另一個(gè)用戶(如果他們?cè)试S)進(jìn)行訪問(wèn);

Remember Me:記住我,登錄之后,下次可直接進(jìn)入系統(tǒng)。

看了上面的組件是不是突然覺(jué)得Shiro在實(shí)際應(yīng)用中被小看了?雖然Shiro為我們提供了這么多功能,但它并不會(huì)幫我們實(shí)現(xiàn)具體的用戶、權(quán)限等體系,關(guān)于用戶、角色、權(quán)限等需要自行設(shè)計(jì),然后在Shiro中進(jìn)行處理即可。

核心組件

Shiro包括三大核心組件:Subject,SecurityManager和Realms。這三個(gè)組件的關(guān)系如下圖:

Subject:主體,即“當(dāng)前操作用戶”。在Shiro中Subject并不僅僅指人,是一個(gè)抽象概念,也可以是第三方進(jìn)程、后臺(tái)帳戶(Daemon Account)或其他類(lèi)似事物(如爬蟲(chóng)、機(jī)器人等)。也就是說(shuō)它僅僅意味著“當(dāng)前跟軟件交互的東西”。所有Subject都綁定到SecurityManager上,SecurityManager才是實(shí)際的執(zhí)行者。

SecurityManager:它是Shiro框架的核心,典型的Facade模式,Shiro通過(guò)SecurityManager來(lái)管理內(nèi)部組件實(shí)例(包括所有的Subject),并通過(guò)它來(lái)提供安全管理的各種服務(wù)。類(lèi)似SpringMVC中的DispatcherServlet的作用。

Realm:域,充當(dāng)了Shiro與應(yīng)用安全數(shù)據(jù)間的“橋梁”或者“連接器”。也就是說(shuō),當(dāng)對(duì)用戶執(zhí)行認(rèn)證(登錄)和授權(quán)(訪問(wèn)控制)驗(yàn)證時(shí),Shiro會(huì)從應(yīng)用配置的Realm中查找用戶及其權(quán)限信息。從這個(gè)意義上講,Realm本質(zhì)上是一個(gè)安全相關(guān)的DAO:它封裝了數(shù)據(jù)源的連接細(xì)節(jié),在需要時(shí)將相關(guān)數(shù)據(jù)提供給Shiro。當(dāng)配置Shiro時(shí),至少指定一個(gè)Realm,用于認(rèn)證和(或)授權(quán)。

Shiro內(nèi)置了可以連接大量安全數(shù)據(jù)源(又名目錄)的Realm,如LDAP、關(guān)系數(shù)據(jù)庫(kù)(JDBC)、類(lèi)似INI的文本配置資源以及屬性文件等。如果默認(rèn)的Realm不能滿足需求,還可以自定義Realm實(shí)現(xiàn)。

Shiro架構(gòu)概覽

分析了上述組件,我們梳理一下Shiro使用的簡(jiǎn)單場(chǎng)景:應(yīng)用程序通過(guò)Subject來(lái)進(jìn)行認(rèn)證和授權(quán),而Subject是委托給SecurityManager管理的。SecurityManager進(jìn)行認(rèn)證和授權(quán)又需要Authenticator和Realm的支持,因此需將Realm注入給SecurityManager。

那么,Shiro內(nèi)部的架構(gòu)又是如何呢?

上圖中,Subject、SecurityManager、Realm我們?cè)谇懊嬉呀?jīng)講到過(guò)了,這里再看看其他模塊:

Authenticator:認(rèn)證器,負(fù)責(zé)Subject的認(rèn)證,支持自定義實(shí)現(xiàn);需要認(rèn)證策略(Authentication Strategy),即認(rèn)證通過(guò)的條件。

Authrizer:授權(quán)器,或者訪問(wèn)控制器,用來(lái)決定主體是否有權(quán)限進(jìn)行相應(yīng)的操作。

SessionManager:SessionManager用于管理Session的生命周期。Shiro可用在Web環(huán)境和非Web環(huán)境,所以Shiro就抽象出一個(gè)Session來(lái)管理主體與應(yīng)用之間交互的數(shù)據(jù),這樣就可以將不同應(yīng)用的Session進(jìn)行集中管理,從而實(shí)現(xiàn)分布式會(huì)話。

SessionDAO:如果想把Session存儲(chǔ)到數(shù)據(jù)庫(kù)或Memcached當(dāng)中,則可實(shí)現(xiàn)對(duì)應(yīng)的SessionDAO來(lái)實(shí)現(xiàn)會(huì)話的CRUD。SessionDAO中可以使用Cache進(jìn)行緩存,來(lái)提高性能;

CacheManager:緩存控制器,用來(lái)管理用戶、角色、權(quán)限等緩存。

Cryptography:密碼模塊,提供了常見(jiàn)的加解密組件。

了解了上述組件的功能,再回想一下在實(shí)踐中的應(yīng)用,是不是有點(diǎn)豁然開(kāi)朗了?

小結(jié)

看到很多朋友在使用shiro時(shí)往往是在網(wǎng)上找到一段代碼,然后進(jìn)行簡(jiǎn)單的修改便運(yùn)用起來(lái)了,而各個(gè)組件之間什么關(guān)系,實(shí)現(xiàn)這個(gè)功能的原理是什么等信息卻沒(méi)有進(jìn)行深入探究。這樣即便實(shí)踐了很多項(xiàng)目,依舊無(wú)法提升自身的技能。本篇文章從shiro的功能、架構(gòu)、組件等方面進(jìn)行講解,經(jīng)過(guò)本篇文章的學(xué)習(xí),想必大家已經(jīng)掌握了使用Shiro的基本原理和概念,這也是為后續(xù)深入學(xué)習(xí)和實(shí)踐做好準(zhǔn)備了。

 

責(zé)任編輯:武曉燕 來(lái)源: 程序新視界
相關(guān)推薦

2022-08-08 10:09:08

Vitest單元測(cè)試

2020-10-15 11:18:13

Linux內(nèi)核虛擬機(jī)

2018-02-08 10:52:13

Kotlin語(yǔ)言代碼

2010-12-06 09:10:02

LightSwitch

2023-02-08 09:02:05

VS Code摸魚(yú)神器

2022-06-29 10:04:01

PiniaVuex

2022-03-02 10:53:22

Postman工具開(kāi)發(fā)

2022-12-03 18:24:13

數(shù)據(jù)能力場(chǎng)景

2013-11-20 13:41:32

IE微軟解決方法

2021-04-13 07:29:13

Swagger3接口Postman

2021-03-18 11:41:04

影子IT影子IoT物聯(lián)網(wǎng)安全

2020-07-02 09:46:05

AI

2021-11-09 08:57:13

元宇宙VR平行時(shí)空

2024-01-10 08:08:25

Python空值校驗(yàn)開(kāi)發(fā)

2024-04-16 13:34:26

JSONMsgpack存儲(chǔ)

2009-06-15 11:22:06

2024-01-31 08:23:54

2023-06-05 14:14:21

騰訊索引面試

2022-08-31 15:48:26

插件開(kāi)發(fā)

2020-11-12 15:38:48

機(jī)器人人工智能系統(tǒng)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产精品日本一区二区在线播放 | 国产精品久久久久久中文字 | 国产一级片免费视频 | 狠狠撸在线视频 | 国产乱码久久久久久一区二区 | 999国产精品视频 | 亚洲欧美中文日韩在线v日本 | h免费观看 | 精品一区国产 | 成人影视网址 | 日韩成人一区二区 | 欧美视频成人 | 免费精品一区 | 黄色三级毛片 | 日本二区在线观看 | 亚洲国产成人精品久久久国产成人一区 | 午夜精品一区二区三区三上悠亚 | 欧美激情欧美激情在线五月 | 久久久日韩精品一区二区三区 | 国产精品a久久久久 | 九九久久这里只有精品 | 成人激情视频网 | 日韩精品免费一区二区在线观看 | 欧美激情啪啪 | 69精品久久久久久 | 亚洲国产精品久久久久秋霞不卡 | 国产精品久久久久久久久免费软件 | 色婷婷久久久久swag精品 | 日韩精品一区二区三区中文在线 | 免费视频一区二区三区在线观看 | 国产综合第一页 | 国产日韩欧美电影 | 伊人网伊人网 | 国产一区二区三区四区hd | 97视频人人澡人人爽 | 国产高清免费视频 | 伊人性伊人情综合网 | 男女下面一进一出网站 | 免费观看毛片 | 国产精品九九九 | 色网在线看 |