亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Shiro Realm權限認證怎么實現

發布時間:2021-12-27 16:43:17 來源:億速云 閱讀:134 作者:iii 欄目:大數據

這篇文章主要講解了“Shiro Realm權限認證怎么實現”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Shiro Realm權限認證怎么實現”吧!

shiro下載

要學習 shiro,我們首先需求去 shiro 官網下載 shiro,官網地址地址 https://shiro.apache.org/,截至本文寫作時,shiro 的最新穩定版本為 1.4.0 ,本文將采用這個版本。當然,shiro 我們也可以從 github 上下載到源碼。兩個源碼下載地址如下:

  1. apache shiro

  2. github-shiro

上面我主要是和小伙伴們介紹下源碼的下載,并沒有涉及到 jar 包的下載,jar 包我們到時候直接使用 maven 即可。

創建演示工程

這里我們先不急著寫代碼,我們先打開剛剛下載到的源碼,源碼中有一個samples目錄,如下:

Shiro Realm權限認證怎么實現  

這個 samples 目錄是官方給我們的一些演示案例,其中有一個 quickstart 項目,這個項目是一個 maven 項目,參考這個 quickstart ,我們來創建一個自己的演示工程。

  • 首先使用 maven 創建一個 JavaSE 工程
    工程創建成功后在pom文件中添加如下依賴:

<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-all</artifactId>
<version>RELEASE</version>
</dependency>
 
  • 配置用戶

參考 quickstart 項目中的 shiro.ini 文件,我們來配置一個用戶,配置方式如下:首先在 resources 目錄下創建一個 shiro.ini 文件,文件內容如下:

[users]
sang=123,admin
[roles]
admin=*
 

以上配置表示我們創建了一個名為 sang 的用戶,該用戶的密碼是 123 ,該用戶的角色是 admin ,而 admin 具有操作所有資源的權限。

  • 執行登錄

OK,做完上面幾步之后,我們就可以來看看如何實現一次簡單的登錄操作了。這個登錄操作我們依然是參考 quickstart 項目中的類來實現,首先我們要通過 shiro.ini 創建一個 SecurityManager ,再將這個 SecurityManager 設置為單例模式,如下:

Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
 

如此之后,我們就配置好了一個基本的 Shiro 環境,注意此時的用戶和角色信息我們配置在 shiro.ini 這個配置文件中,接下來我們就可以獲取一個 Subject 了,這個 Subject 就是我們當前的用戶對象,獲取方式如下:

Subject currentUser = SecurityUtils.getSubject();
 

拿到這個用戶對象之后,接下來我們可以獲取一個 session 了,這個 session 和我們 web 中的 HttpSession 的操作基本上是一致的,不同的是,這個 session 不依賴任何容器,可以隨時隨地獲取,獲取和操作方式如下:

//獲取session
Session session = currentUser.getSession();
//給session設置屬性值
session.setAttribute("someKey", "aValue");
//獲取session中的屬性值
String value = (String) session.getAttribute("someKey");
 

說了這么多,我們的用戶到現在還沒有登錄呢,Subject 中有一個 isAuthenticated 方法用來判斷當前用戶是否已經登錄,如果 isAuthenticated 方法返回一個 false,則表示當前用戶未登錄,那我們就可以執行登陸,登錄方式如下:

if (!currentUser.isAuthenticated()) {
   UsernamePasswordToken token = new UsernamePasswordToken("sang", "123");
   try {
       currentUser.login(token);
   } catch (UnknownAccountException uae) {
       log.info("There is no user with username of " + token.getPrincipal());
   } catch (IncorrectCredentialsException ice) {
       log.info("Password for account " + token.getPrincipal() + " was incorrect!");
   } catch (LockedAccountException lae) {
       log.info("The account for username " + token.getPrincipal() + " is locked.  " +
               "Please contact your administrator to unlock it.");
   }
   catch (AuthenticationException ae) {
   }
}
 

首先構造 UsernamePasswordToken ,兩個參數就是我們的用戶名和密碼,然后調用 Subject 中的 login 方法執行登錄,當用戶名輸錯,密碼輸錯、或者賬戶鎖定等問題出現時,系統會通過拋異常告知調用者這些問題。

當登錄成功之后,我們可以通過如下方式獲取當前登陸用戶的用戶名:

log.info("User [" + currentUser.getPrincipal() + "] logged in successfully.");
 

我們也可以通過調用 Subject 中的 hasRole 和 isPermitted 方法來判斷當前用戶是否具備某種角色或者某種權限,如下:

if (currentUser.hasRole("admin")) {
   log.info("May the Schwartz be with you!");
} else {
   log.info("Hello, mere mortal.");
}
if (currentUser.isPermitted("lightsaber:wield")) {
   log.info("You may use a lightsaber ring.  Use it wisely.");
} else {
   log.info("Sorry, lightsaber rings are for schwartz masters only.");
}
 

最后,我們可以通過 logout 方法注銷本次登錄,如下:

currentUser.logout();

感謝各位的閱讀,以上就是“Shiro Realm權限認證怎么實現”的內容了,經過本文的學習后,相信大家對Shiro Realm權限認證怎么實現這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

阿荣旗| 汉寿县| 房山区| 清流县| 隆尧县| 潞西市| 祥云县| 泰顺县| 拉萨市| 本溪| 海阳市| 河东区| 巴中市| 无锡市| 兴安县| 东丽区| 盐城市| 九江县| 景洪市| 榆树市| 台安县| 新建县| 宜丰县| 霍山县| 寿宁县| 漳浦县| 南宫市| 若尔盖县| 亚东县| 海丰县| 丰城市| 壶关县| 忻城县| 固始县| 黔南| 钟祥市| 馆陶县| 五华县| 新乐市| 宜黄县| 什邡市|