91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

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

佛山市| 台北县| 榆社县| 岳普湖县| 陈巴尔虎旗| 汝州市| 永嘉县| 蕲春县| 且末县| 乐业县| 平顺县| 丹棱县| 全南县| 白水县| 星子县| 云林县| 黑龙江省| 罗定市| 潞城市| 舞阳县| 桓仁| 寿宁县| 开封市| 惠州市| 南丰县| 普宁市| 康马县| 陇川县| 科尔| 孝昌县| 新巴尔虎左旗| 澄迈县| 新和县| 平利县| 两当县| 开化县| 永宁县| 莆田市| 金川县| 逊克县| 偃师市|