shiro入門demo

? 搭建springboot項目,引入以下依賴:

  <dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--單元測試--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><!--shiro--><dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-core</artifactId><version>1.2.2</version></dependency></dependencies>

一、身份驗證:

1、登錄/退出:

(1)數據mock:新建shiro-user.ini文件

[users]
zs=123
ls=123
admin=123

(2)單元測試:

import com.demo.shiro.ShiroApplication;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.subject.Subject;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;/*** 身份驗證*/
@SpringBootTest(classes = {ShiroApplication.class}, webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@RunWith(SpringRunner.class)
public class ShiroAuthenticationTest {/*** 1、登陸/退出,以admin/123用戶為例*/@Testpublic void testLoginInAndPut(){//1、創建SecurityManagerFactory,用戶名/密碼硬編碼在ini文件,實際應存儲在數據庫并將密碼加密IniSecurityManagerFactory factory=new IniSecurityManagerFactory("classpath:shiro-user.ini");//2、創建安全管理器SecurityManager,并綁定給SecurityUtilSecurityManager securityManager = factory.getInstance();SecurityUtils.setSecurityManager(securityManager);//3、通過SecurityUtil獲取登入用戶主體subject,并創建tokenSubject subject = SecurityUtils.getSubject();UsernamePasswordToken token=new UsernamePasswordToken("admin", "123");//用戶認證(shrio的核心功能之一)try {//異常//4、登錄,即身份驗證subject.login(token);System.out.println("認證成功");} catch (AuthenticationException e) {//5、認證失敗//org.apache.shiro.authc.UnknownAccountException:賬號錯誤異常//org.apache.shiro.authc.IncorrectCredentialsException:密碼錯誤異常//org.apache.shiro.authz.UnauthorizedException: 授權錯誤異常System.out.println("認證失敗");e.printStackTrace();}//6、安全退出subject.logout();}
}

執行,控制臺輸出:認證成功;

將密碼改為123456,拋出密碼錯誤異常

如上代碼可總結出身份驗證的步驟:

1)收集用戶身份 / 憑證,即如用戶名 / 密碼;
2)調用 Subject.login 進行登錄,如果失敗將得到相應的 AuthenticationException 異常,根據異常提示用戶錯誤信息;否則登錄成功;
3)最后調用 Subject.logout 進行退出操作。?

二、角色驗證:

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

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

相關文章

集的增刪操作

集是可以修改的&#xff0c;增加元素可以用add和update函數。刪除可以用pop、discard、remove等函數。 1 增加集里的元素 add函數的參數視為一個整體插入到集里&#xff0c;而update函數傳入的參數是把要傳入的元素拆分&#xff0c;做為個體傳入到集合中。 s set("hell…

.9.png的創建

1、創建.9.png 選中圖片&#xff0c;右擊&#xff0c;選擇Create 9-Patch file&#xff0c;點擊確定會生成一個xxx.9.png的圖片 2、繪制拉伸區域 在圖片的最外邊界繪制拉伸區域&#xff0c;按住鼠標左鍵不放&#xff0c;繪制完成后保存就可以使用了。繪制結果示意如下&…

phpstudy小皮(PHP集成環境)下載及使用

下載 https://www.xp.cn/download.html直接官網下載即可&#xff0c;下載完解壓是個.exe程序&#xff0c;直接點擊安裝就可以&#xff0c;它會自動在D盤目錄為D:\phpstudy_pro 使用 phpMyAdmin是集成的數據庫可視化&#xff0c;這里需要下載一下&#xff0c;在軟件管理-》網站程…

OPPO怎么錄屏?教程來了,讓你成為錄屏達人

“有人知道OPPO怎么錄屏嗎&#xff0c;前陣子剛買的OPPO手機&#xff0c;用起來感覺挺流暢的&#xff0c;功能也很齊全&#xff0c;最近因為工作原因&#xff0c;需要用到錄屏功能&#xff0c;但是我不知道怎么打開&#xff0c;就想問問大伙&#xff0c;OPPO怎么錄屏呀。” 在…

Redis分片集群一步一步全過程搭建

文章目錄 Redis搭建分片集群1. 搭建的分片集群結構2.準備實例和配置&#xff08;1&#xff09;創建目錄&#xff08;2&#xff09;創建配置文件&#xff08;3&#xff09;將這個文件拷貝到每個目錄下&#xff08;4&#xff09;修改每個目錄下的redis.conf&#xff0c;將其中的6…

Yocto 還是 Buildroot,構建自定義嵌入式系統時,您會選擇哪一種?

假設您正在采用集成平板開發新一代大型智能微波爐。這個創意不錯吧&#xff01;現在&#xff0c;您需要構建自定義操作系統&#xff0c;在保證不會燒焦食物&#xff08;更不要燒毀房屋哦&#xff09;的前提下&#xff0c;輔助管理各項事務。除此之外&#xff0c;您還需要創建一…

px? pt? dp? em?rem?vw?vh?ch?ex?這些單位你了解嗎?

目錄 前言 一、常見單位 1、px單位 2、dp單位 3、pt單位 4、百分比% 5、em單位 6、rem單位 7、vw和vh單位 8、ch、ex單位 二、如何換算 1、 pt和px換算 2、px和dp換算 3、em和px換算 4、rem和px換算 三、總結 前言 前端開發在日常設計中除了最常用的 px 以外&…

第二十八章 控制到 XML 模式的映射 - 流類到 XML 類型的映射

文章目錄 第二十八章 控制到 XML 模式的映射 - 流類到 XML 類型的映射將集合屬性映射到 XML 模式 第二十八章 控制到 XML 模式的映射 - 流類到 XML 類型的映射 如果類或屬性基于流&#xff0c;則它將投影為 XML 類型&#xff0c;如下表所示&#xff1a; IRIS 流的 XML 類型 …

使用BeautifulSoup 4和Pillow合并網頁圖片到一個PDF:一種高效的方式來處理網頁圖像

背景 ? 網頁上的培訓材料&#xff0c;內容全是PPT頁面圖片。直接通過瀏覽器打印&#xff0c;會存在只打印第一頁&#xff0c;并且把瀏覽器上無效信息也打印出來情況。但目標是希望將頁面圖片全部打印為pdf形式。 實現方案 利用網頁“另存為”&#xff0c;將頁面內所有圖片資…

官宣!「灣區之光群星演唱會」拉開2024新年音樂華麗序幕!

萬眾期待&#xff0c;群星薈萃&#xff01;青春寶安時尚灣區——灣區之光群星演唱會即將在2024年1月5日閃耀亮相深圳寶安。 華語歌壇巨星天后齊聚一堂&#xff0c;攜手多位實力唱將&#xff0c;共同呈現一場無與倫比的演唱會盛宴&#xff01;在深情而又充滿力量的歌聲之中&…

Linux修復磁盤壞道,重新掛載硬盤

修復磁盤 掛載報錯&#xff1a; [rootlocalhost ~]$ mount /dev/sdb /mnt/mydevmount: /dev/sdb is write-protected, mounting read-only mount: wrong fs type, bad option, bad superblock on /dev/sdb,missing codepage or helper program, or other errorIn some cases …

15、lambda表達式、右值引用、移動語義

前言 返回值后置 auto 函數名 (形參表) ->decltype(表達式) lambda表達式 lambda表達式的名稱是一個表達式 (外觀類似函數)&#xff0c;但本質絕非如此 語法規則 [捕獲表] (參數表) 選項 -> 返回類型 { 函數體; }lambda表達式的本質 lambda表達式本質其實是一個類…

textarea文本框回車enter的時候自動提交表單,根據內容自動高度

切圖網近期一個bootstrap5仿chatgpt頁面的項目遇到的&#xff0c;textarea文本框回車enter的時候自動提交表單&#xff0c;根據內容自動高度&#xff0c;代碼如下&#xff0c;親測可用。 <textarea placeholder"Message ChatGPT…" name"" rows"&q…

TypeScript 第五節:條件語句

一、TypeScript 中常用的條件語句 TypeScript 的條件語句與 JavaScript 的條件語句類似&#xff0c;包括 if 語句、if...else 語句、switch 語句等。 1、if 語句 if 語句用于判斷指定條件是否為 true&#xff0c;如果是 true&#xff0c;則執行一段代碼塊。 示例&#xff1a;…

命名空間this_thread

命名空間 - this_thread 在C11中不僅添加了線程類&#xff0c;還添加了一個關于線程的命名空間std::this_thread&#xff0c;在這個命名空間中提供了四個公共的成員函數&#xff0c;通過這些成員函數就可以對當前線程進行相關的操作了。 1.get_id() 調用命名空間std::this_t…

java腳本引擎Groovy動態執行

1.java腳本引擎Groovy實戰_groovy腳本-CSDN博客 2.java可用的動態腳本引擎和動態代碼執行_java動態執行代碼片段-CSDN博客 3.Groovy動態加載Java代碼的使用方法和工具類_groovy調用java類方法-CSDN博客 4.springboot應用動態運行groovy腳本-附源碼 - 簡書 (jianshu.com) 5.…

是不是學了低代碼就自動放棄了高薪?內部資深解答來了!

目錄 前言低代碼開發&#xff1a;點餐還是自助烹飪&#xff1f;低代碼的“菜單”低代碼的局限性 市場影響的分析&#xff1a;一場關于低代碼的對話低代碼開發與程序員職業&#xff1a;名人視角解析總結 前言 近年來&#xff0c;低代碼開發因其低門檻、高效率和易集成的特點受到…

conda 計算當前包的個數

Conda是一個強大的包管理器和環境管理器&#xff0c;它用于安裝和管理來自不同源的軟件包。若要計算當前conda環境中安裝的包的數量&#xff0c;你可以使用以下命令&#xff1a; 首先&#xff0c;激活你想要檢查的conda環境&#xff08;如果不是默認的base環境&#xff09;&am…

虹科新聞丨廣州市“強企增效”項目助力虹科高質量發展!

來源&#xff1a;虹科電子科技有限公司 虹科新聞丨廣州市“強企增效”項目助力虹科高質量發展&#xff01; 原文鏈接&#xff1a;https://mp.weixin.qq.com/s/9pUXx5ZZpIi5S4s4o90GJA 歡迎關注虹科&#xff0c;為您提供最新資訊&#xff01; 2023年12月6日至7日&#xff0c;工…

hive/spark用法記錄

1. cast()更改數據類型 cast(column_name as type) 2. get_dt_date()自定義日期操作函數&#xff08;返回不帶橫線的日期&#xff09; select get_dt_date();–獲取當前日期&#xff0c;返回 20170209 select get_dt_date(get_date(-2));–獲取當前日期偏移&#xff0c;轉為…