Shiro InI 概念
使用過如 Spring 之類的 IOC、DI 容器就知道,Shiro 提供的 INI 配置也是非常類似的,即可以理解為容器,但是區別在於它從一個根對象 SecurityManager開始。
Shiro 是從根對象 SecurityManager 進行身份驗證和授權的,這個對象是線程安全且整個應用只需要一個即可,因此 Shiro 提供了 SecurityUtils 綁定它為全局的,方便後續操作。
Shiro 的類都是 POJO 的,因此都很容易放到任何 IOC 容器管理,Shiro 支持依賴注入:public 空參構造器對象的創建、setter 依賴注入。
shiro.ini配置文件等同於java代碼:
配置文件方式:
authenticator=org.apache.shiro.authc.pam.ModularRealmAuthenticator
securityManager.authenticator=$authenticator
jdbcRealm=com.shiro.test.JdbcRealm
securityManager.realms=$jdbcRealm
Java代碼方式
ModularRealmAuthenticator authenticator =new ModularRealmAuthenticator();
securityManager.setAuthenticator(authenticator);
JdbcRealm jdbcRealm =new JdbcRealm();
securityManager.setRealms(jdbcRealm );
對象名 = 全限定類名,相對於調用 public 無參構造器創建對象。
對象名. 屬性名 = 值,相當於調用 setter 方法設置常量值。
對象名. 屬性名 =$對象引用,相當於調用 setter 方法設置對象引用。
INI 文件內容
ini 配置文件類似於 Java 中的 properties中的鍵-值對(key=value),不過提供了將 key-value 分類的特性,key 是每個部分不重複即可,而不是整個配置文件。格式如下:
[main]
\#提供了對根對象securityManager及其依賴的配置
\#其構造器必須是 public 空參構造器,通過反射創建相應的實例。
securityManager=org.apache.shiro.mgt.DefaultSecurityManager
jdbcRealm=com.shiro.test.JdbcRealm
securityManager.realms=$jdbcRealm
[users]
\#提供了對用戶、密碼及其角色的配置,用戶名=密碼,角色1,角色2
username=password,role1,role2
[roles]
\#提供了角色及權限之間關係的配置,角色=權限1,權限2
role1=permission1,permission2
[urls]
\#用於web,提供了對web url攔截相關的配置,url=攔截器[參數],攔截器
/index.jsp= anon
/static/** = authc, roles[admin], perms["permission1"]
INI 文件加載
通過IniSecurityManagerFactory工廠加載並創建SecurityManager實例,代碼如下。
關鍵字: 配置文件 對象 SecurityManager