Apache Shiro 快速配置
快速开始 一章中讲到能够从一个 INI 资源路径创建 SecurityManager 实例。如果你需要,INI 配置也可以通过 org.apache.shiro.config.Ini
类使用编程方式创建。Ini 类的功能与 JDK的 java.util.Properties 类相似,但通过 section 名称它同时还支持分割。
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.util.Factory;
import org.apache.shiro.config.Ini;
import org.apache.shiro.config.IniSecurityManagerFactory;
import org.apache.shiro.mgt.SecurityManager;
...
Ini ini = new Ini();
...
Factory<SecurityManager> factory = new IniSecurityManagerFactory(ini);
SecurityManager securityManager = factory.getInstance();
SecurityUtils.setSecurityManager(securityManager);
现在,我们知道如何从 INI 配置构建出一个 SecurityManager 了,我们看看到底是如何定义一个 Shiro INI 配置的。
INI Sections
下面示范了 INI 文件结构:
[main]
...
[users]
...
[roles]
...
[urls]
...
[users]
[users] section 允许你定义一组静态的用户帐户。这在大部分拥有少数用户帐户或用户帐户不需要在运行时被动态地创建的环境下是很有用的。以下是一个例子:
# format: username = password, role1, role2, ..., roleN
root = secret,admin
guest = guest,guest
presidentskroob = 12345,president
darkhelmet = ludicrousspeed,darklord,schwartz
lonestarr = vespa,goodguy,schwartz
如果你不想 [users] section 中密码是纯文本的,你可以使用你喜爱的散列算法(MD5,Sha1,Sha256,等等)来进行加密,并使用生产的字符串作为密码值。默认情况下,密码字符串是1 进制编码,但可以使用Base64编码代替16进制编码来配置(见下面)。
一旦你指定了文本密码散列值,你得告诉 Shiro 这些都是加密的。你可以通过配置在[main] section 中隐式地创建iniRealm 来使用合适的CredentialsMatcher实现来对应到你所指定的哈希算法:
[main]
...
sha256Matcher = org.apache.shiro.authc.credential.Sha256CredentialsMatcher
...
iniRealm.credentialsMatcher = $sha256Matcher
[users]
user1 = sha256-hashed-hex-encoded-password,role1,role2,role3
你可以像任何其他对象一样在CredentialsMatcher上配置任何属性,以反映你哈希策略,例如,指定salting是否被使用或需要执行多少次哈希迭代。请参见 org.apache.shiro.authc.credential.HashedCredentialsMatcher 的 JavaDoc 来更好的理解哈希策略。
[roles]
[roles] section 允许你把定义在 [users] section 中的角色与权限关联起来。另外,这在大部分拥有少数用户帐户或用户帐户不需要在运行时被动态地创建的环境下是很有用的。以下是一个例子:
[roles]
# format: roleName = permission1, permission2, ..., permissionN
admin = *
schwartz = lightsaber:*
goodguy = winnebago:drive:eagle5
在 [roles] section 中每个配置行必须定义一个映射以下格式的角色到权限的键/值:
rolename = permissionDefinition1, permissionDefinition2, … , permissionDefinitionN
permissionDefinition
是一个任意的字符串,但大多数人将会使用符合 org.apache.shiro.authz.permission.WildcardPermission
格式的字符串,为了易用性和灵活性。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论