2019-08-10 Shiro安全框架

Shiro沒有Spring Security做的功能強大。
shiro四大組件:Authentication認(rèn)證,Authorization授權(quán),Session Manager會話管理,Cryptography密碼學(xué).
shiro與系統(tǒng)交互過程:1、應(yīng)用代碼通過Subject來進(jìn)行認(rèn)證和授權(quán),而Subject又委托給SecurityManager;2、我們需要給Shiro的SecurityManager注入Realm,從而讓SecurityManager能得到合法的用戶及其權(quán)限進(jìn)行判斷。
從以上也可以看出,Shiro不提供維護(hù)用戶/權(quán)限,而是通過Realm讓開發(fā)人員自己注入。
shiro單純用MD5加密不安全,需要加鹽加密。

環(huán)境配置
1.添加依賴
2.配置web.xml(在shiro官網(wǎng)查找
3.在Controller層創(chuàng)建自定義realm類:AuthRealm,繼承AuthorizingRealm
4.在Controller層配置applicationContext-shiro.xml, Spring整合shiro(shiro官網(wǎng)查找
anon匿名訪問,指定放行資源
authc認(rèn)證訪問資源
perms授權(quán)訪問資源

使用shiro完成登錄功能:
Controller中的認(rèn)證過程

//1.獲取subject
         Subject subject = SecurityUtils.getSubject();
//2.構(gòu)造用戶名和密碼
         UsernamePasswordToken upToken = new UsernamePasswordToken(user,password);
//3.借助subject完成用戶登錄
         subject.login(upToken);//login進(jìn)行身份認(rèn)證
//4.通過shiro獲取用戶對象,保存到session中(realm認(rèn)證方法構(gòu)造器第一個參數(shù)就是數(shù)據(jù)庫的用戶信息)
         User user = (User)subject.getPrincipal(); //獲取安全數(shù)據(jù)(用戶對象)

Realm中的認(rèn)證過程

//1.獲取到用戶界面輸入的用戶名和密碼
      UsernamePasswordToken upToken = (UsernamePasswordToken) authenticationToken;
//2.根據(jù)upToken獲得用戶名
//3.根據(jù)用戶名查找用戶信息
//4.用SimpleAuthenticationInfo封裝用戶信息,第一個參數(shù):安全數(shù)據(jù)(user對象)第二個參數(shù):密碼(數(shù)據(jù)庫密碼)第三個參數(shù):當(dāng)前調(diào)用realm域的名稱(類名即可
   SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(user,user.getPassword(),this.getName());

使用shiro授權(quán)(權(quán)限判斷
realm中后授權(quán)功能
//1.根據(jù)認(rèn)證用戶獲取當(dāng)前登錄的用戶對象
User user = (User) principalCollection.getPrimaryPrincipal();
//2.根據(jù)用戶id獲得權(quán)限
//3.使用set集合遍歷權(quán)限
//4.用SimpleAuthorizationInfo封裝用戶信息

硬編碼實現(xiàn)授權(quán)
在Controller中添加
Subject subject = SecurityUtils.getSubject();
subject.cheakPermission("權(quán)限名稱");//權(quán)限校驗
xml中實現(xiàn)授權(quán)
在applicationContext-shiro.xml中添加
perms的位置必須在authc上。
/訪問資源=perms["權(quán)限名稱"]
注解實現(xiàn)授權(quán)

  1. 在applicationContext-shiro.xml中開啟shiro注解支持
  2. 開啟Aop自動代理(已經(jīng)完成)
  3. 在controller中使用@RequiresPermissions(“”)注解
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一 、Shiro入門 1.簡介 Apache Shiro 是 Java 的一個安全(權(quán)限)框架。 Shiro 可以...
    TiaNa_na閱讀 1,142評論 0 8
  • 寫在前面 在一款應(yīng)用的整個生命周期,我們都會談及該應(yīng)用的數(shù)據(jù)安全問題。用戶的合法性與數(shù)據(jù)的可見性是數(shù)據(jù)安全中非常重...
    日拱一兵閱讀 3,310評論 3 79
  • 什么是shiro 是一個java的安全(權(quán)限)框架,可以用在javase/javaee環(huán)境; shiro可完成:認(rèn)...
    強某某閱讀 1,243評論 1 5
  • 萬里豪情上天山, 一腔熱血灑邊關(guān)。 墓草青青墓草黃, 半是忠魂半望鄉(xiāng)。
    于新源閱讀 562評論 0 2
  • 那一年黃刺玫被定為我們家鄉(xiāng)的市花。那一年在這個以煤炭而興的城市正值壯年,處處都展現(xiàn)著欣欣向榮。那一年老師告訴我們:...
    董筱北閱讀 429評論 0 3

友情鏈接更多精彩內(nèi)容