国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - shiro之INI配置詳解

shiro之INI配置詳解

2021-01-07 13:31動力節點 Java教程

這篇文章主要為大家詳細介紹了shiro之INI配置的相關資料,具有一定的參考價值,感興趣的小伙伴們可以參考一下

如果大家使用過如Spring之類的IoC/DI容器的話,Shiro提供的INI配置也是非常類似的,即可以理解為是一個IoC/DI容器,但是區別在于它從一個根對象securityManager開始。 

根對象SecurityManager

從之前的Shiro架構圖可以看出,Shiro是從根對象SecurityManager進行身份驗證和授權的;也就是所有操作都是自它開始的,這個對象是線程安全且真個應用只需要一個即可,因此Shiro提供了SecurityUtils讓我們綁定它為全局的,方便后續操作。

因為Shiro的類都是POJO的,因此都很容易放到任何IoC容器管理。但是和一般的IoC容器的區別在于,Shiro從根對象securityManager開始導航;Shiro支持的依賴注入:public空參構造器對象的創建、setter依賴注入。 

1、純Java代碼寫法(com.github.zhangkaitao.shiro.chapter4.NonConfigurationCreateTest): 

 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
DefaultSecurityManager securityManager = new DefaultSecurityManager();
//設置authenticator
ModularRealmAuthenticator authenticator = new ModularRealmAuthenticator();
authenticator.setAuthenticationStrategy(new AtLeastOneSuccessfulStrategy());
securityManager.setAuthenticator(authenticator);
 
//設置authorizer
ModularRealmAuthorizer authorizer = new ModularRealmAuthorizer();
authorizer.setPermissionResolver(new WildcardPermissionResolver());
securityManager.setAuthorizer(authorizer);
 
 
 
 
//設置Realm
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/shiro");
ds.setUsername("root");
ds.setPassword("");
 
JdbcRealm jdbcRealm = new JdbcRealm();
jdbcRealm.setDataSource(ds);
jdbcRealm.setPermissionsLookupEnabled(true);
securityManager.setRealms(Arrays.asList((Realm) jdbcRealm));
 
//將SecurityManager設置到SecurityUtils 方便全局使用
SecurityUtils.setSecurityManager(securityManager);
 
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
subject.login(token);
Assert.assertTrue(subject.isAuthenticated());  

2.1、等價的INI配置(shiro-config.ini) 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
[main]
#authenticator
authenticator=org.apache.shiro.authc.pam.ModularRealmAuthenticator
authenticationStrategy=org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy
authenticator.authenticationStrategy=$authenticationStrategy
securityManager.authenticator=$authenticator
 
#authorizer
authorizer=org.apache.shiro.authz.ModularRealmAuthorizer
permissionResolver=org.apache.shiro.authz.permission.WildcardPermissionResolver
authorizer.permissionResolver=$permissionResolver
securityManager.authorizer=$authorizer
 
#realm
dataSource=com.alibaba.druid.pool.DruidDataSource
dataSource.driverClassName=com.mysql.jdbc.Driver
dataSource.url=jdbc:mysql://localhost:3306/shiro
dataSource.username=root
#dataSource.password=
dbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$dataSource
jdbcRealm.permissionsLookupEnabled=true
securityManager.realms=$jdbcRealm 

即使沒接觸過IoC容器的知識,如上配置也是很容易理解的:

1、對象名=全限定類名  相對于調用public無參構造器創建對象
2、對象名.屬性名=值    相當于調用setter方法設置常量值
3、對象名.屬性名=$對象引用    相當于調用setter方法設置對象引用 

2.2、Java代碼(com.github.zhangkaitao.shiro.chapter4.ConfigurationCreateTest) 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
Factory<org.apache.shiro.mgt.SecurityManager> factory =
     new IniSecurityManagerFactory("classpath:shiro-config.ini");
 
org.apache.shiro.mgt.SecurityManager securityManager = factory.getInstance();
 
 
//將SecurityManager設置到SecurityUtils 方便全局使用
SecurityUtils.setSecurityManager(securityManager);
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken("zhang", "123");
subject.login(token);
 
Assert.assertTrue(subject.isAuthenticated()); 

如上代碼是從Shiro INI配置中獲取相應的securityManager實例:
1、默認情況先創建一個名字為securityManager,類型為org.apache.shiro.mgt.DefaultSecurityManager的默認的SecurityManager,如果想自定義,只需要在ini配置文件中指定“securityManager=SecurityManager實現類”即可,名字必須為securityManager,它是起始的根;
2、IniSecurityManagerFactory是創建securityManager的工廠,其需要一個ini配置文件路徑,其支持“classpath:”(類路徑)、“file:”(文件系統)、“url:”(網絡)三種路徑格式,默認是文件系統;
3、接著獲取SecuriyManager實例,后續步驟和之前的一樣。 

從如上可以看出Shiro INI配置方式本身提供了一個簡單的IoC/DI機制方便在配置文件配置,但是是從securityManager這個根對象開始導航。    

INI配置

ini配置文件類似于Java中的properties(key=value),不過提供了將key/value分類的特性,key是每個部分不重復即可,而不是整個配置文件。如下是INI配置分類: 
Java代碼  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
[main]
#提供了對根對象securityManager及其依賴的配置
securityManager=org.apache.shiro.mgt.DefaultSecurityManager
.…………
securityManager.realms=$jdbcRealm
 
[users]
#提供了對用戶/密碼及其角色的配置,用戶名=密碼,角色1,角色2
username=password,role1,role2
 
[roles]
#提供了角色及權限之間關系的配置,角色=權限1,權限2
role1=permission1,permission2
 
[urls]
#用于web,提供了對web url攔截相關的配置,url=攔截器[參數],攔截器
/index.html = anon
/admin/** = authc, roles[admin], perms["permission1"]

[main]部分

提供了對根對象securityManager及其依賴對象的配置。

創建對象 

Java代碼  

?
1
securityManager=org.apache.shiro.mgt.DefaultSecurityManager

其構造器必須是public空參構造器,通過反射創建相應的實例。 

常量值setter注入 

Java代碼  

?
1
2
dataSource.driverClassName=com.mysql.jdbc.Driver
jdbcRealm.permissionsLookupEnabled=true

會自動調用jdbcRealm.setPermissionsLookupEnabled(true),對于這種常量值會自動類型轉換。 

對象引用setter注入 

Java代碼  

?
1
2
3
4
authenticator=org.apache.shiro.authc.pam.ModularRealmAuthenticator
authenticationStrategy=org.apache.shiro.authc.pam.AtLeastOneSuccessfulStrategy
authenticator.authenticationStrategy=$authenticationStrategy
securityManager.authenticator=$authenticator 

會自動通過securityManager.setAuthenticator(authenticator)注入引用依賴。 

嵌套屬性setter注入 

Java代碼  

securityManager.authenticator.authenticationStrategy=$authenticationStrategy   

也支持這種嵌套方式的setter注入。 

byte數組setter注入 
Java代碼  

?
1
2
3
4
#base64 byte[]
authenticator.bytes=aGVsbG8=
#hex byte[]
authenticator.bytes=0x68656c6c6f

默認需要使用Base64進行編碼,也可以使用0x十六進制。 

Array/Set/List setter注入 

Java代碼  

?
1
2
authenticator.array=1,2,3
authenticator.set=$jdbcRealm,$jdbcRealm 

多個之間通過“,”分割。 

Map setter注入

Java代碼  

?
1
authenticator.map=$jdbcRealm:$jdbcRealm,1:1,key:abc

即格式是:map=key:value,key:value,可以注入常量及引用值,常量的話都看作字符串(即使有泛型也不會自動造型)。         

實例化/注入順序 
Java代碼  

?
1
2
3
4
5
realm=Realm1
realm=Realm12
 
authenticator.bytes=aGVsbG8=
authenticator.bytes=0x68656c6c6f

后邊的覆蓋前邊的注入。 

測試用例請參考配置文件shiro-config-main.ini。 

[users]部分
配置用戶名/密碼及其角色,格式:“用戶名=密碼,角色1,角色2”,角色部分可省略。如:

Java代碼  

?
1
2
3
[users]
zhang=123,role1,role2
wang=123

密碼一般生成其摘要/加密存儲,后續章節介紹。 

[roles]部分
配置角色及權限之間的關系,格式:“角色=權限1,權限2”;如:
Java代碼  

?
1
2
3
[roles]
role1=user:create,user:update
role2=* 

如果只有角色沒有對應的權限,可以不配roles,具體規則請參考授權章節。 

[urls]部分

配置url及相應的攔截器之間的關系,格式:“url=攔截器[參數],攔截器[參數],如:  
Java代碼  

?
1
2
[urls]
/admin/** = authc, roles[admin], perms["permission1"]

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://blog.sina.com.cn/s/blog_9c6852670102wwep.html

延伸 · 閱讀

精彩推薦
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 欧美日韩网站 | 一道本一区| 欧美99| 一级毛片观看 | 国产乱淫精品一区二区三区毛片 | 午夜小视频在线 | 欧美中文一区二区三区 | 先锋av资源 | 国产毛片一区二区 | 日韩视频久久 | 99久久久精品国产一区二区 | 久色| 国产精品亲子伦av一区二区三区 | 曰本人一级毛片免费完整视频 | 一本色道久久综合狠狠躁的推荐 | 精品视频在线播放 | 永久免费av片在线观看全网站 | 成人激情视频 | 国产精品久久久久免费a∨ 欧美黄色精品 | 96自拍视频| 黄色直接看 | 一区二区不卡 | 久久综合2019 | 日韩欧美一区二区在线视频 | 欧美日在线 | 日韩午夜 | 国产在线中文字幕 | 黄色免费av | 亚洲成年人影院 | 精品日韩一区二区三区 | 99999色 | 日韩福利影院 | 成人午夜精品一区二区三区 | 欧美精品v国产精品v日韩精品 | 亚洲精品免费视频 | 99久久婷婷国产综合精品电影 | 免费观看的av | 91精选| 91午夜理伦私人影院 | 五月天婷婷在线视频 | 天天射天天干 |