zl程序教程

您现在的位置是:首页 >  其他

当前栏目

shiro 的权限管理概念

概念权限 管理 shiro
2023-09-27 14:22:12 时间

一.权限管理

1.1 权限管理

权限管理是属于系统安全范畴的内容,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。

权限管理包括用身份认证授权两部分,简称认证授权。对需要访问的资源,首先验证用户的合法性,用户经过身份认证后,如果具有某资源的访问权限则放行访问。否则对于某些资源没有权限是无法访问的 。

简而言之:权限管理就是对用户进行认证和授权。

1.2 身份认证

身份认证:就是判断一个用户是否为合法用户的处理过程。最常用的简单身份认证方式是系统通过核对用户输入的用户名和口令,看其是否与系统中存储的该用户的用户名和口令一致,来判断用户身份是否正确。对于采用指纹等系统,则出示指纹;对于硬件Key等刷卡系统,则需要刷卡。

1.3 授权

授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的

二.shiro框架

2.1 shiro

Shiro 是一个功能强大且易于使用的Java安全框架,它执行身份验证、授权、加密和会话管理。使用Shiro易于理解的API,您可以快速轻松地保护任何应用程序—从最小的移动应用程序到最大的web和企业应用程序。

简而言之:Shiro是一个用来做用户安全认证、授权、加密、会话的安全框架。

2.2 shiro的流程

1.应用代码ApplicationCode通过subject进行认证和授权,而subject又委托给SecurityManager

2.我们需要给shiro的SecurityManager注入Realm,从而让SecurityManager能得到合法的用户以及权限进行判断。

从以上也可以看出:Shiro不提供维护用户/权限,而是通过Realm让开发人员自己注入。

简而言之:subject--》securityManager---》realm--》authentication--》authorization的流程。

2.3 shiro的组件架构

Subject主体,可以看到主体可以是任何可以与应用交互的“用户”, Subject在shiro中是一个接口,接口中定义了很多认证授相关的方法,外部程序通过subject进行认证授,而subject是通过SecurityManager安全管理器进行认证授权

SecurityManager:相当于SpringMVC中的DispatcherServlet或者Struts2中的FilterDispatcher;是Shiro的心脏;所有具体的交互都通过SecurityManager进行控制;它管理着所有Subject、且负责进行认证和授权、及会话、缓存的管理。实质上SecurityManager是通过Authenticator进行认证,通过Authorizer进行授权,通过SessionManager进行会话管理等。

securityManager是一个接口,继承了Authenticator, Authorizer, SessionManager这三个接口

Authenticator:认证器,负责主体认证的,这是一个扩展点,如果用户觉得Shiro默认的不好,可以自定义实现;其需要认证策略(Authentication Strategy),即什么情况下算用户认证通过了;

Authrizer:授权器,或者访问控制器,用来决定主体是否有权限进行相应的操作;即控制着用户能访问应用中的哪些功能;

Realm可以有1个或多个Realm,可以认为是安全实体数据源,即用于获取安全实体的;可以是JDBC实现,也可以是LDAP实现,或者内存实现等等;由用户提供;注意:Shiro不知道你的用户/权限存储在哪及以何种格式存储;所以我们一般在应用中都需要实现自己的Realm;securityManager进行安全认证需要通过Realm获取用户权限数据,比如:如果用户身份数据在数据库,那么realm就需要从数据库获取用户身份信息。注意:不要把realm理解成只是从数据源取数据,在realm中还有认证授权校验的相关的代码。

SessionDAODAO大家都用过,数据访问对象,用于会话的CRUD,比如我们想把Session保存到数据库,那么可以实现自己的SessionDAO,通过如JDBC写到数据库;比如想把Session放到Memcached中,可以实现自己的Memcached SessionDAO;另外SessionDAO中可以使用Cache进行缓存,以提高性能

CacheManager:缓存控制器,来管理如用户、角色、权限等的缓存的;因为这些数据基本上很少去改变,放到缓存中后可以提高访问的性能。

Cryptography:密码模块,Shiro提高了一些常见的加密组件用于如密码加密/解密的。

参考地址:   https://www.cnblogs.com/flyuphigh/p/8058454.html