设为首页 收藏本站
查看: 772|回复: 0

[经验分享] Apache Shiro 配置

[复制链接]

尚未签到

发表于 2015-11-14 04:25:16 | 显示全部楼层 |阅读模式
  Shiro 被设计成能够在任何环境下工作,从最简单的命令行应用程序到最大的企业群集应用。由于环境的多样性,使得许多配置机制适用于它的配置。Shiro的SecurityManager 实现及所支持的组件都是兼容JavaBean的。这使得Shiro几乎能使用任何配置格式,如regular Java,XML(Spring,JBoss, Guice,等等),YAML,JSON,Groovy Builder markup,以及更多的配置。
  2.3.1    创建SecurityManager
  
  SecurityManager是Shiro的心脏,主要是做为一个轻量级的“容器”组件,委托计划所有的行为到嵌套的或包含的其他组件。因此应用程序一般都需要配置一个SecurityManager。
  创建一个SecurityManger并把它提供给应用程序的绝对的最简单的方法是创建一个org.apache.shiro.mgt.DefaultSecurityManager并把它链到代码中。例如:


Realm realm = //instantiate or acquire a Realm instance.  We'll discuss Realms later.


SecurityManager securityManager = new DefaultSecurityManager(realm);


//Make the SecurityManager instance available to the entire application via static memory:

SecurityUtils.setSecurityManager(securityManager);

  
  
  Shiro 的SecurityManager 实现实质上是一个特定安全的嵌套组件中的模块化对象图。因为它们也是兼容JavaBean的,你可以调用任何嵌套组件的getter 和setter 方法来配置SecurityManager以及它的内部对象图。
  例如,如果你想配置SecurityManager实例来使用自定义的SessionDAO 来定制Session Management,你可以通过嵌套的SessionManager 的setSessionDAO 方法直接设置SessionDAO:


...

DefaultSecurityManager securityManager = new DefaultSecurityManager(realm);

SessionDAO sessionDAO = new CustomSessionDAO();

((DefaultSessionManager)securityManager.getSessionManager()).setSessionDAO(sessionDAO);
...
  
  除了象上述硬编码的方式外也支持文本配置, Shiro 支持INI 格式来构建SecurityManager 对象图及其支持的组件。INI 易于阅读, 易于配置,且设置简单,适合大多数应用程序。
  我们能够从一个INI 资源路径创建SecurityManager 实例。我们可以从文件系统,classpath,或分别拥有前缀file:,classpath:,或url:的URL 中获取资源。本例采用Factory 提取classpath 根目录下的shiro.ini 文件并返回SecurityManager实例:


import org.apache.shiro.SecurityUtils;
import org.apache.shiro.util.Factory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.config.IniSecurityManagerFactory;

...

Factory<SecurityManager> factory = new IniSecurityManagerFactory(&quot;classpath:shiro.ini&quot;);
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
  如果你需要,INI 配置也可以通过org.apache.shiro.config.Ini 类使用编程方式创建。Ini 类的功能与JDK java.util.Properties 类相&#20284;,但通过section 名称,它同时还支持分割。例如:


import org.apache.shiro.SecurityUtils;
import org.apache.shiro.util.Factory;
import org.apache.shiro.mgt.SecurityManager;
import org.apache.shiro.config.Ini;
import org.apache.shiro.config.IniSecurityManagerFactory;

...

Ini ini = new Ini();
//populate the Ini instance as necessary
...
Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini);
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
  
  

2.3.2    INI配置项  
  INI基本上是一个文本配置,包含了不同section的键/&#20540;对。每个section是唯一命名的,键只是在section中唯一的,而不是在整个配置中(此处与JDK属性不同)。每个section都可以被看作单一属性定义。
  注释行是以#号或;号开始。
  [main]
  配置应用程序的SecurityManager实例及任何它的依赖组件(如Realms)。例如:


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

myRealm = com.company.security.shiro.DatabaseRealm
myRealm.connectionTimeout = 30000
myRealm.username = jsmith
myRealm.password = secret
myRealm.credentialsMatcher = $sha256Matcher

securityManager.sessionManager.globalSessionTimeout = 1800000
  
  
  简单的原始属性,通过等号来指定。
  如果你需要设置的&#20540;不是一个原始&#20540;,而是另一个对象呢?那么,你可以使用$符号来引用之前定义的实例。
  在INI 配置行的等号左侧使用点号,你可以遍历对象图来得到想设置的最终的对象/属性。
  对于字节数组&#20540;,默认的是使用Base64编码字符串,然而,如果你喜欢使用16 进制编码,你必须在字符串前加上0x前缀。
  [users]
  允许你定义一组静态的用户帐户。这在大部分拥有少数用户帐户或用户帐户不需要在运行时被动态地创建的环境下是很有用的。


[users]
admin = secret
lonestarr = vespa, goodguy, schwartz
darkhelmet = ludicrousspeed, badguy, schwartz
  
  在[users]section 中的每行都必须保证是下面的&#26684;式:
  username =password, roleName1, roleName2, …, roleNameN
  l  在等号左边的&#20540;是用户名
  l  在等号右边的第一个&#20540;是用户的秘密。密码是必须的。
  l  任何在密码后用逗号分隔的&#20540;都是分配给该用户的角色名。角色名是可选的。
  如果你不想[users]section 中密码是纯文本的,你可以使用你喜爱的散列算法(MD5,Sha1,Sha256,等等)来进行加密,并使用生产的字符串作为密码&#20540;。默认情况下,密码字符串是16 进制编码,但可以使用Base64 编码代替16进制编码来配置。
  一旦你指定了文本密码散列&#20540;,你得告诉Shiro 这些都是加密的。你可以通过配置在[main] section 中隐式地创建iniRealm来使用合适的CredentialsMatcher 实现来对应到你所指定的哈希算法:
  [roles]
  允许你把定义在[users]section 中的角色与权限关联起来。这在大部分拥有少数用户帐户或用户帐户不需要在运行时被动态地创建的环境下是很有用的。例如:


[roles]
# 'admin' role has all permissions, indicated by the wildcard '*'
admin = *
# The 'schwartz' role can do anything (*) with any lightsaber:
schwartz = lightsaber:*
# The 'goodguy' role is allowed to 'drive' (action) the winnebago (type) with
# license plate 'eagle5' (instance specific id)
goodguy = winnebago:drive:eagle5
  
  在[roles]section 中每个配置行必须定义一个映射以下&#26684;式的角色到权限的键/&#20540;:rolename =permissionDefinition1, permissionDefinition2, … , permissionDefinitionN
  permissionDefinition是一个任意的字符串,但大多数人将会使用符合org.apache.shiro.authz.permission.WildcardPermission&#26684;式的字符串,为了易用性和灵活性。
  [urls]
  在你的应用程序中定义自适应过滤器链来匹配URL 路径。例如:


[urls]

/index.html = anon
/user/create = anon
/user/** = authc
/admin/** = authc, roles[administrator]
/rest/** = authc, rest
/remoting/rpc/** = authc, perms[&quot;remote:invoke&quot;]
  
  等号左边是一个与Web 应用程序上下文根目录相关的Ant 风&#26684;的路径表达式。等号右边为过滤器链。
  例如,假设你有如下的[urls]行:


/account/** = ssl, authc
  此行表明,“任何对应用程序的/account 或任何它的子路径(/account/foo,account/bar/baz,等等)的请求都将触发'ssl,authc'过滤器链”。





版权声明:本文为博主原创文章,未经博主允许不得转载。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-138938-1-1.html 上篇帖子: org.apache.commons.beanutils.ConversionException: No value specified for 'Date' 下篇帖子: Apache+Tomcat+Php+Mysql的集成
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表