Shiro学习笔记(2)-Shiro配置

前言

本文具体解析Shiro的配置机制,主要分为如下两部分:编码式配置和INI文件配置。

编码式配置

通过编码方式配置比较简单,但是可重用性低,现实使用中用的不是很多,这边给一个简单示例

     //获取Realm对象
     Realm realm = ...
     //创建SecurityManager对象
     SecurityManager securityManager = new DefaultSecurityManager(realm);
     
     //设置组件 如SessionDAO 
     SessionDAO sessionDAO = new CustomSessionDAO();
     ((DefaultSessionManager)securityManager.getSessionManager()).setSessionDAO(sessionDAO);
     
     //设置SecurityManager全局获取
     SecurityUtils.setSecurityManager(securityManager);
     

INI文件配置

INI配置可以使用文件的方式进行配置也可以使用代码的方式进行配置,具体如下:

通过INI对象进行配置

这种方式用代码的方式代替配置文件的编写,效果等同。

 Ini ini = new Ini();
 ini.setSectionProperty(...);

通过Resource配置

这种方式用配置文件进行配置,和Ini效果配置等同。

    Factory<SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro.ini");
    SecurityManager securityManager = factory.getInstance();
    SecurityUtils.setSecurityManager(securityManager);

具体部分


[main]
# 此部分用来定义SecurityManager, Realms以及任何需要组成SecurityManager的组件都定义在这个部分

[users]
# 用来定义少量的用户账号

[roles]
# 用来定义少量的角色

[urls]
用来对web应用的url进行过滤配置

下面分别讲解各部分具体的配置:

[main]

案例如下:

[main]
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher

# 实例化一个MyRealm并且名字为myRealm
myRealm = com.mamba.MyRealm

# 自定义了两个属性,会被赋值给myRealm对象
myRealm.username = jsmith
myRealm.password = secret

# 引用属性
myRealm.credentialsMatcher = $sha256Matcher

# 嵌套赋值
securityManager.sessionManager.globalSessionTimeout = 1800000

注意:ini配置文件支持数据类型

  • 嵌套类型
    例子是将securityManager这个对象的嵌套对象sessionManager的globalSessionTimeout变量进行了赋值
    securityManager.sessionManager.globalSessionTimeout = 1800000
  • 集合
    securityManager.sessionManager.sessionListeners = $sessionListener1, $sessionListener2

  • map
    object1 = com.company.some.Class
    object2 = com.company.another.Class
    ...
    anObject = some.class.with.a.Map.property
    
    anObject.mapProperty = key1:$object1, key2:$object2

[users]

正如上面所说的,该部分是用来定义一组静态的用户账号,这适用某些特定账号的定义(例如一些特定权限的账号)。

# 语法: =左边代表的是username(必填),=右边第一个值代表的是密码(必填),往后用,隔开的值代表的是对应的角色(选填)。
[users]
admin = 123
lonestarr = 123, consumer, manager
darkhelmet = 123, consumer, boss

对密码进行加密
需要在main指定加密方式,然后将密码赋值成加密后的值

[main]
...
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
...
iniRealm.credentialsMatcher = $sha256Matcher
...

[users]
# user1 = sha256-hashed-hex-encoded password, role1, role2, ...
user1 = 2bb80d537b1da3e38bd30361aa855686bde0eacd7162fef6a25fe97bf527a25b, role1, role2, ...

[roles]

这部分用来定义具体角色说具有的权限

  # 通过*可以代表admin具有所有的权限
  admin=*
  # 赋予lonestarr这个角色sendInfo权限
  lonestarr=sendInfo
  # 赋予lonestarr这个角色message下的sendInfo权限(通过:分隔)
  lonestarr=message:sendInfo
  # 赋予darkhelmet这个角色对id为1和2 message进行sendInfo的权限(实体:权限:实体id) 注意用"包装起来
  darkhelmet="message:sendInfo:1,2"  

后面在Permission的部分还会详细介绍权限相关的配置

[urls]

这部分主要是针对Web应用,对指定的url进行过滤和拦截。具体会在整合web章节进行详细讲解。

总结

通过本片文章比较直观的了解了Shiro的配置过程,并且配置的主要机制进行了讲解。接下来就是Shiro的核心内容认证和授权,下篇开始会进行详细讲解。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章