_009_Shiro_Realm、Authenticator、JdbcRealm

 

1   Realm: 

Shiro 从 Realm 获取安全数据(如用户、角色、
权限),即 SecurityManager 要验证用户身份,那么它需
要从 Realm 获取相应的用户进行比较以确定用户身份是否
合法;也需要从Realm得到用户相应的角色/权限进行验证
用户是否能进行操作.。 

一般继承 AuthorizingRealm(授权)即可;其继承了
AuthenticatingRealm(即身份验证),而且也间接继承了
CachingRealm(带有缓存实现)。

2 Realm的继承关系:

 3  Authenticator

Authenticator 的职责是验证用户帐号,是 Shiro API 中身份验
证核心的入口点:如果验证成功,将返回AuthenticationInfo 验
证信息;此信息中包含了身份及凭证;如果验证失败将抛出相应
的 AuthenticationException 异常。

SecurityManager 接口继承了 Authenticator,另外还有一个
ModularRealmAuthenticator实现,其委托给多个Realm 进行
验证,验证规则通过 AuthenticationStrategy 接口指定。

4  AuthenticationStrategy

AuthenticationStrategy 接口的默认实现:
• FirstSuccessfulStrategy:只要有一个 Realm 验证成功即可,只返回第
一个 Realm 身份验证成功的认证信息,其他的忽略;
• AtLeastOneSuccessfulStrategy:只要有一个Realm验证成功即可,和
FirstSuccessfulStrategy 不同,将返回所有Realm身份验证成功的认证信
息;
• AllSuccessfulStrategy:所有Realm验证成功才算成功,且返回所有
Realm身份验证成功的认证信息,如果有一个失败就失败了。
• ModularRealmAuthenticator 默认是 AtLeastOneSuccessfulStrategy
策略

 在Shiro.ini配置JdbcRealm

[main]
dataSource=com.mchange.v2.c3p0.ComboPooledDataSource
dataSource.driverClass=com.mysql.jdbc.Driver
dataSource.jdbcUrl=jdbc:mysql://localhost:3306/shiro
dataSource.user=root
dataSource.password=123456123
jdbcRealm=org.apache.shiro.realm.jdbc.JdbcRealm
jdbcRealm.dataSource=$dataSource
securityManager.realm=$jdbcRealm

猜你喜欢

转载自blog.csdn.net/poiuyppp/article/details/86243525