Apache Shiro Realm

6 篇文章 0 订阅

Realm是一个能够访问应用程序特定的安全数据(如用户、角色及权限)的组件。Realm将应用程序特定的数据转换成一种Shiro能够理解的格式,这样Shiro能够提供一个单一的易理解的Subject编程API,无论有多少数据源存在或你的应用程序特定的数据是怎样的。

Realm通常和数据源是一对一的对应关系,如关系数据库,LDAP目录,文件系统或其他类似资源。因此,Realm接口的实现使用数据源特定的API来展示授权数据(角色、权限等),如JDBC,文件IO,Hibernate或JPA,或其他数据访问API.

Realm实质上就是一个特定安全的DAO。

因为这些数据源大多存储身份验证数据(如密码的凭证)以及授权数据(如角色或权限),每个Shiro Realm能够执行身份验证和授权操作。

Realm configuration

如果使用Shiro的INI配置文件,你能够自定义及引用Realm,就像在[main]项中的任何其他对象一样,但它们在securityManager中采用两种方法之一进行配置:显式或隐式。

Explicit Assignment

这是一个显式的配置方法,在定义一个或多个Realm后,将它们作为securityManager对象的集合属性。

例如:

fooRealm = com.turing.foo.Realm

barRealm = com.turing.another.Realm

bazRealm = com.turing.baz.Realm

securityManager.realms = $fooRealm, $barRealm,$bazRealm

显式分配是确定的--你控制具体使用哪一个Realm及它们用于身份验证和授权的顺序。

Realm Authentication

理解了Shiro的主要Authentication工作流后,了解在一个授权尝试中当Authenticator与Realm交互时到底发生了什么是很重要的。

Supporting Authentication Tokens

当在Realm被访问来执行一个授权尝试之前,它的supports方法被调用。如果返回值为true,则它的getAuthenticationInfo(token)方法被调用。

通常realm会检查提交的token的类型(接口或类)来判断它是否能够处理它。

Handling supported Authentication Tokens

若Realm支持一个提交的AuthenticationToken,那么Authenticator将会调用该Realm的getAuthenticationInfo(token)方法。这有效的代表了一个与Realm的后备数据源的授权尝试。该方法按以下步骤进行:

1、为主要的识别信息(账户识别信息)检查token;

2、基于principal在数据源中寻找相吻合的账户数据;

3、确保token支持的credentials匹配那些存储在数据源的;

4、若credentials匹配,返回一个封装了Shiro能够理解的账户数据格式的AuthenticationInfo实例。

5、若credentials不匹配,则抛出AuthenticationException异常。

如果credentials匹配给予的principal(s),那么返回一个非空的AuthenticationInfo实例来代表来自于该数据源的Subject账户信息。

SaveTime

直接实现Realm接口可能导致时间消耗及错误。大多数人选择AuthorizingRealm抽象类的子类而不是从头开始。

这个类实现了常用的authentication及authorization工作流来节省你的时间和精力。

Disabling Authentication

如果出于某些原因,你不想用Realm对数据源执行身份验证(也许是由于你只想Realm执行授权),你可以彻底的禁用Realm对身份验证的支持通过从Realm的support方法返回false。然后你的realm在身份验证尝试中永远不会被访问到。

当然,至少需要一个能够支持AuthenticationTokens且已配置的Realm,如果你想验证Subjects.























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

芸复山人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值