【shiro】(3)---了解Shiro

匿名 (未验证) 提交于 2019-12-03 00:38:01

了解Shiro

一Apache Shiro作用

身份验证授权加密会话管理,令行应用程序。



(1) Subject

Subject:主体,用来与用户交互的对象。比如认证用户信息, subject.login(用户信息)。再比如,判断用户是否有相关的角色 subject.hasRole("小学生");
Subject实例都绑定到(并且 需要)SecurityManager。当你与Subject进行交互时,这些交互转化为与SecurityManager的交互。

(2) SecurityManager

SecurityManager即安全管理器,对全部的subject进行安全管理,它是shiro的核心,负责对所有的subject进行安全管理。通过SecurityManager可以完成subject的认证、授权等,实质上SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理等

(3) Authenticator

Authenticator即认证器,对用户身份进行认证,Authenticator是一个接口,shiro提供ModularRealmAuthenticator实现类,通过ModularRealmAuthenticator基本上可以满足大多数需求,也可以自定义认证器。

Authorizer即授权器,用户通过认证器认证通过,在访问功能时需要通过授权器判断用户是否有此功能的操作权限。

Realm即领域,相当于datasource数据源,securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份数据在数据库那么realm就需要从数据库获取用户身份信息。
注意:不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。

sessionManager即会话管理,shiro框架定义了一套会话管理,它不依赖web容器的session,所以shiro可以使用在非web应用上,也可以将分布式应用的会话集中在一点管理,此特性可使它实现单点登录。

SessionDAO即会话dao,是对session会话操作的一套接口,比如要将session存储到数据库,可以通过jdbc将会话存储到数据库。

CacheManager即缓存管理,将用户权限数据存储在缓存,这样可以提高性能。

Cryptography即密码管理,shiro提供了一套加密/解密的组件,方便开发。比如提供常用的散列、加/解密等功能。

代码示例

public class MyFirstTest {       @Test       public void test1() {           //加载配置文件,并获取工厂,这个SecurityManager小心与java.lang包下的SecurityManager冲突           Factory<org.apache.shiro.mgt.SecurityManager> factory = new IniSecurityManagerFactory("classpath:shiro_1.ini");           //获取安全管理者实例           org.apache.shiro.mgt.SecurityManager sm = factory.getInstance();           //将安全管理者放入全局对象           SecurityUtils.setSecurityManager(sm);           //全局对象通过安全管理者生成Subject对象           Subject subject = SecurityUtils.getSubject();           //封装用户的数据           UsernamePasswordToken token = new UsernamePasswordToken("jay", "123");           //将用户的数据token 最终传递到Realm中进行对比           subject.login(token);           //判断本帐号是否已经被认证           Assert.assertEquals(true, subject.isAuthenticated());       }   } 

配置文件内容如下,它就是数据源Realm。以后的章节数据源Realm将是JdbcRealm,数据将会被存放到数据库中

[users]   jay=123

三、过滤器

当 Shiro 被运用到 web 项目时,Shiro 会自动创建一些默认的过滤器对客户端请求进行过滤。以下是 Shiro 提供的过滤器:

过滤器简称

对应的 Java 类

anonorg.apache.shiro.web.filter.authc.AnonymousFilter
authcorg.apache.shiro.web.filter.authc.FormAuthenticationFilter
authcBasicorg.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter
permsorg.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter
portorg.apache.shiro.web.filter.authz.PortFilter
restorg.apache.shiro.web.filter.authz.HttpMethodPermissionFilter
rolesorg.apache.shiro.web.filter.authz.RolesAuthorizationFilter
sslorg.apache.shiro.web.filter.authz.SslFilter
userorg.apache.shiro.web.filter.authc.UserFilter
logoutorg.apache.shiro.web.filter.authc.LogoutFilter
noSessionCreationorg.apache.shiro.web.filter.session.NoSessionCreationFilter

解释:

/admins/**=anon               # 表示该 uri 可以匿名访问 /admins/**=auth               # 表示该 uri 需要认证才能访问 /admins/**=authcBasic         # 表示该 uri 需要 httpBasic 认证 /admins/**=perms[user:add:*]  # 表示该 uri 需要认证用户拥有 user:add:* 权限才能访问 /admins/**=port[8081]         # 表示该 uri 需要使用 8081 端口 /admins/**=rest[user]         # 相当于 /admins/**=perms[user:method],其中,method 表示  get、post、delete 等 /admins/**=roles[admin]       # 表示该 uri 需要认证用户拥有 admin 角色才能访问 /admins/**=ssl                # 表示该 uri 需要使用 https 协议 /admins/**=user               # 表示该 uri 需要认证或通过记住我认证才能访问 /logout=logout                # 表示注销,可以当作固定配置

注意:

anon,authcBasic,auchc,user

perms,roles,ssl,rest,port

想太多,做太少,中间的落差就是烦恼。想没有烦恼,要么别想,要么多做。少校【4】

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!