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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 人文社科 > 生活经验 >内容正文

生活经验

Shiro安全登录框架

發(fā)布時(shí)間:2023/11/27 生活经验 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shiro安全登录框架 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?環(huán)境準(zhǔn)備

本文使用Maven構(gòu)建,因此需要一點(diǎn)Maven知識(shí)。首先準(zhǔn)備環(huán)境依賴(lài):?

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依賴(lài)即可。

?

2.3??登錄/退出

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

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

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

??

2、測(cè)試用例(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實(shí)例?并綁定給SecurityUtils??
  7. ????org.apache.shiro.mgt.SecurityManager?securityManager?=?factory.getInstance();??
  8. ????SecurityUtils.setSecurityManager(securityManager);??
  9. ????//3、得到Subject及創(chuàng)建用戶名/密碼身份驗(yàn)證Token(即用戶身份/憑證)??
  10. ????Subject?subject?=?SecurityUtils.getSubject();??
  11. ????UsernamePasswordToken?token?=?new?UsernamePasswordToken("zhang",?"123");??
  12. ??
  13. ????try?{??
  14. ????????//4、登錄,即身份驗(yàn)證??
  15. ????????subject.login(token);??
  16. ????}?catch?(AuthenticationException?e)?{??
  17. ????????//5、身份驗(yàn)證失敗??
  18. ????}??
  19. ??
  20. ????Assert.assertEquals(true,?subject.isAuthenticated());?//斷言用戶已經(jīng)登錄??
  21. ??
  22. ????//6、退出??
  23. ????subject.logout();??
  24. }??
  25. ???

2.1、首先通過(guò)new IniSecurityManagerFactory并指定一個(gè)ini配置文件來(lái)創(chuàng)建一個(gè)SecurityManager工廠;

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

2.3、通過(guò)SecurityUtils得到Subject,其會(huì)自動(dòng)綁定到當(dāng)前線程;如果在web環(huán)境在請(qǐng)求結(jié)束時(shí)需要解除綁定;然后獲取身份驗(yàn)證的Token,如用戶名/密碼;

2.4、調(diào)用subject.login方法進(jìn)行登錄,其會(huì)自動(dòng)委托給SecurityManager.login方法進(jìn)行登錄;

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

2.6、最后可以調(diào)用subject.logout退出,其會(huì)自動(dòng)委托給SecurityManager.logout方法退出。

?

從如上代碼可總結(jié)出身份驗(yàn)證的步驟:

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

2、調(diào)用Subject.login進(jìn)行登錄,如果失敗將得到相應(yīng)的AuthenticationException異常,根據(jù)異常提示用戶錯(cuò)誤信息;否則登錄成功;

3、最后調(diào)用Subject.logout進(jìn)行退出操作。

?

如上測(cè)試的幾個(gè)問(wèn)題:

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

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

轉(zhuǎn)載于:https://www.cnblogs.com/perfect-yuewei/p/5312247.html

總結(jié)

以上是生活随笔為你收集整理的Shiro安全登录框架的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。