首页 > 编程知识 正文

shiro权限管理实现原理,shiro权限管理和spring security

时间:2023-05-05 18:23:39 阅读:187606 作者:3958

Shiro权限管理 表的设计引入pom包三大核心组件shiro的运行过程自定义Realm配置ShiroconfigShiro四种权限控制方式登录实例
shiro是一个安全框架 使用shiro可以非常容易开发出足够好的应用,可以帮助我们完成:认证 授权 加密 会话管理 与web集成 缓存

表的设计

引入pom包

三大核心组件

*Subject:即”当前操作用户“,但在shiro中不仅仅指人还指第三方进程 后台账户 或其他类似事物。仅仅意味着”当前跟软件交互的东西“。

*SecurityManager:是shiro框架的核心 ,用来管理内部组件实例 提供安全管理的各种服务。

*Realm:充当Shiro与应用安全数据间的”桥梁“或者连接器。当用户执行认证(登录)和授权(访问控制)时,shiro会从应用配置的realm中查找用户及其权限信息。

shiro的运行过程 程序员自己编写的代码 在程序中需要进行权限控制 需要调用Subject的API

Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject,如网络爬虫,机器人等;即一个抽象概念;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager;可以把Subject认为是一个门面;SecurityManager才是实际的执行者;
SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;且它管理着所有Subject;可以看出它是Shiro的核心,它负责与后边介绍的其他组件进行交互,如果学习过SpringMVC,你可以把它看成DispatcherServlet前端控制器;
Realm:域,Shiro从从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能进行操作;可以把Realm看成DataSource,即安全数据源。 自定义Realm

public class ShiroRealm extends AuthorizingRealm{
}
1、ShiroRealm父类AuthorizingRealm将获取Subject相关信息分成两步:获取身份验证信息(doGetAuthenticationInfo)及授权信息(doGetAuthorizationInfo);
2、doGetAuthenticationInfo获取身份验证相关信息:首先根据传入的用户名获取User信息;然后如果user为空,那么抛出没找到帐号异常UnknownAccountException;如果user找到但锁定了抛出锁定异常LockedAccountException;最后生成AuthenticationInfo信息,交给间接父类AuthenticatingRealm使用CredentialsMatcher进行判断密码是否匹配,如果不匹配将抛出密码错误异常IncorrectCredentialsException;另外如果密码重试此处太多将抛出超出重试次数异常ExcessiveAttemptsException;在组装SimpleAuthenticationInfo信息时,需要传入:身份信息(用户名)、凭据(密文密码)、盐(username+salt),CredentialsMatcher使用盐加密传入的明文密码和此处的密文密码进行匹配。
执行时机:
当调用Subject currentUser = SecurityUtils.getSubject();
currentUser.login(token);
3、doGetAuthorizationInfo获取授权信息:PrincipalCollection是一个身份集合,因为我们现在就一个Realm,所以直接调用getPrimaryPrincipal得到之前传入的用户名即可;然后根据用户名调用UserService接口获取角色及权限信息。
执行时机:
1、subject.hasRole(“admin”) 或 subject.isPermitted(“admin”):自己去调用这个是否有什么角色或者是否有什么权限的时候;
2、@RequiresRoles(“admin”)或@RequiresPermissions(“role:allotResource”) :在方法上加注解的时候;
3、[@shiro.hasPermission name = “admin”][/@shiro.hasPermission]:在页面上加shiro标签的时候,即进这个页面的时候扫描到有这个标签的时候。

配置Shiroconfig



Shiro四种权限控制方式

1.url级别权限控制

2.方法注解权限控制

3.页面标签权限控制

4.代码级别权限控制

登录实例

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。