日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

Shiro安全登录框架

發布時間:2023/11/27 生活经验 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shiro安全登录框架 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?環境準備

本文使用Maven構建,因此需要一點Maven知識。首先準備環境依賴:?

Java代碼??
  1. <dependencies>??
  2. ????<dependency>??
  3. ????????<groupId>junit</groupId>??
  4. ????????<artifactId>junit</artifactId>??
  5. ????????<version>4.9</version>??
  6. ????</dependency>??
  7. ????<dependency>??
  8. ????????<groupId>commons-logging</groupId>??
  9. ????????<artifactId>commons-logging</artifactId>??
  10. ????????<version>1.1.3</version>??
  11. ????</dependency>??
  12. ????<dependency>??
  13. ????????<groupId>org.apache.shiro</groupId>??
  14. ????????<artifactId>shiro-core</artifactId>??
  15. ????????<version>1.2.2</version>??
  16. ????</dependency>??
  17. </dependencies>???

添加junit、common-logging及shiro-core依賴即可。

?

2.3??登錄/退出

1、首先準備一些用戶身份/憑據(shiro.ini)

Java代碼??
  1. [users]??
  2. zhang=123??
  3. wang=123??

此處使用ini配置文件,通過[users]指定了兩個主體:zhang/123、wang/123。

??

2、測試用例(com.github.zhangkaitao.shiro.chapter2.LoginLogoutTest)?

Java代碼??
  1. @Test??
  2. public?void?testHelloworld()?{??
  3. ????//1、獲取SecurityManager工廠,此處使用Ini配置文件初始化SecurityManager??
  4. ????Factory<org.apache.shiro.mgt.SecurityManager>?factory?=??
  5. ????????????new?IniSecurityManagerFactory("classpath:shiro.ini");??
  6. ????//2、得到SecurityManager實例?并綁定給SecurityUtils??
  7. ????org.apache.shiro.mgt.SecurityManager?securityManager?=?factory.getInstance();??
  8. ????SecurityUtils.setSecurityManager(securityManager);??
  9. ????//3、得到Subject及創建用戶名/密碼身份驗證Token(即用戶身份/憑證)??
  10. ????Subject?subject?=?SecurityUtils.getSubject();??
  11. ????UsernamePasswordToken?token?=?new?UsernamePasswordToken("zhang",?"123");??
  12. ??
  13. ????try?{??
  14. ????????//4、登錄,即身份驗證??
  15. ????????subject.login(token);??
  16. ????}?catch?(AuthenticationException?e)?{??
  17. ????????//5、身份驗證失敗??
  18. ????}??
  19. ??
  20. ????Assert.assertEquals(true,?subject.isAuthenticated());?//斷言用戶已經登錄??
  21. ??
  22. ????//6、退出??
  23. ????subject.logout();??
  24. }??
  25. ???

2.1、首先通過new IniSecurityManagerFactory并指定一個ini配置文件來創建一個SecurityManager工廠;

2.2、接著獲取SecurityManager并綁定到SecurityUtils,這是一個全局設置,設置一次即可;

2.3、通過SecurityUtils得到Subject,其會自動綁定到當前線程;如果在web環境在請求結束時需要解除綁定;然后獲取身份驗證的Token,如用戶名/密碼;

2.4、調用subject.login方法進行登錄,其會自動委托給SecurityManager.login方法進行登錄;

2.5、如果身份驗證失敗請捕獲AuthenticationException或其子類,常見的如:?DisabledAccountException(禁用的帳號)、LockedAccountException(鎖定的帳號)、UnknownAccountException(錯誤的帳號)、ExcessiveAttemptsException(登錄失敗次數過多)、IncorrectCredentialsException?(錯誤的憑證)、ExpiredCredentialsException(過期的憑證)等,具體請查看其繼承關系;對于頁面的錯誤消息展示,最好使用如“用戶名/密碼錯誤”而不是“用戶名錯誤”/“密碼錯誤”,防止一些惡意用戶非法掃描帳號庫;

2.6、最后可以調用subject.logout退出,其會自動委托給SecurityManager.logout方法退出。

?

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

1、收集用戶身份/憑證,即如用戶名/密碼;

2、調用Subject.login進行登錄,如果失敗將得到相應的AuthenticationException異常,根據異常提示用戶錯誤信息;否則登錄成功;

3、最后調用Subject.logout進行退出操作。

?

如上測試的幾個問題:

1、用戶名/密碼硬編碼在ini配置文件,以后需要改成如數據庫存儲,且密碼需要加密存儲;

2、用戶身份Token可能不僅僅是用戶名/密碼,也可能還有其他的,如登錄時允許用戶名/郵箱/手機號同時登錄。?

轉載于:https://www.cnblogs.com/perfect-yuewei/p/5312247.html

總結

以上是生活随笔為你收集整理的Shiro安全登录框架的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。