1. 程式人生 > >shiro安全框架學習筆記

shiro安全框架學習筆記

   現在才發現原來安全其實是比較有趣的一個話題。  由於之前已經練過了spring-security的相關內容。所以這裡的shiro只是作為一個知識補充,用作對比學習理解。   由於這個框架相較而言內容比較多一點,所以希望學習的相對詳細一點。  想了想,大概從這幾個方面去學習它:  1.shiro有什麼作用;   2.shiro的來源與發展;   3.shiro的使用; 4.核心概念與理解。

1.shiro有什麼用?

2.shiro的來源與發展:

3.Shiro的使用:

     官方文件的內容,我有點迷。 

     但是就我理解的話,我會根據上下文環境劃分為兩類:  普通java環境;    java web環境。 官網給出的是普通的java環境。  

      

package com.automannn;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.UnknownAccountException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.apache.shiro.util.Factory;


/**
 * @author 
[email protected]
* @time 2018/11/25 20:16 */ public class Main { public static void main(String[] args) { Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini"); SecurityManager securityManager = factory.getInstance(); SecurityUtils.setSecurityManager(securityManager); Subject currentUser = SecurityUtils.getSubject(); Session session = currentUser.getSession(); session.setAttribute("key","hello,shiro!"); if (!currentUser.isAuthenticated()){ UsernamePasswordToken token = new UsernamePasswordToken("automannn","automannn"); token.setRememberMe(true); try { currentUser.login(token); }catch (UnknownAccountException e){ System.out.println("使用者名稱不存在!"); } } } }
[main]
cm = org.apache.shiro.authc.credential.HashedCredentialsMatcher
#cm.hashAlgorithm = SHA-256
cm.hashIterations = 1024
# Base64 encoding (less text):
cm.storedCredentialsHexEncoded = false

iniRealm.credentialsMatcher = $cm

[users]
jdoe = TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJpcyByZWFzb2
asmith = IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbXNoZWQsIG5vdCB

  結果:

  注意:

           1.每個shiro環境,必須具備一個SecurityManager。 這裡由ini配置提供。  

           2. 由於版本的問題,原來的這個配置已經被廢棄。   改為由 Environment介面提供。 但是我在網上沒有找到相關的例子。 因此還是使用了原來的類。原來的類應該是預設使用了Commons-logging日誌框架實現,因此我們必須要將相關引入jcl的依賴。

           3.java web環境下,securityManager由過濾器提供例項操作。 

           4.session不是web環境特有的,為獨立的應用也引入了session的概念。 

4.shiro核心概念與理解:

  shiro涉及到的核心概念有:  Subject;    SecurityManager;    Realms

  1.Subject:

2.SecurityManager:

   就目前來看,它是shiro核心中的核心。  如果要與Spring-security做個對比的話,我覺得有點類似於: 

    它會根據過濾規則,挑選一個提供了該途徑認證方式的方式的認證提供器來完成認證邏輯。

     簡言之,它們就是整個業務邏輯 總控。  

3.Realm:

   類比到spring-secuirty中就是:

   它是spring-security與資料的互動橋樑,同時也提供許可權等操作。 

    相關的配置,以及使用將在以後進行學習。

雖然有些水,但是總算沒有食言。  三篇,耶~~    晚上可以繼續放縱一下了哈哈哈。