shiro使用流程及原理

本文详细介绍了Apache Shiro的使用流程,包括核心组件如Subject、SecurityManager和Realm的作用。阐述了Shiro的执行流程,从应用程序通过Subject进行权限判断,再到SecurityManager与Realm之间的交互获取安全数据。此外,文章还提到了Shiro的四种权限控制方式:程序内Subject编程、Filter配置、注解控制和页面标签。在认证过程中,重点解析了登录时 Realm 的doGetAuthenticationInfo方法如何进行用户验证。而在授权环节,讨论了如何通过 Realm的doGetAuthorizationInfo方法获取角色和权限,并配合拦截器链进行权限控制。
摘要由CSDN通过智能技术生成

1、核心介绍
1)Application Code用户编写代码
2)Subject就是shiro管理的用户
3)SecurityManager安全管理器,就是shiro权限控制核心对象,在编程时,只需要操作Subject方法,底层调用SecurityManager方法,无需直接编程操作SecurityManager
4)Realm应用程序和安全数据之间连接器,应用程序进行权限控制读取安全数据(数据表、文件、网络…)通过Realm对象完成
2、Shiro执行流程
应用程序—>Subject—>SecurityManager—>Realm—>安全数据
3、Shiro进行权限控制的四种主要方式
1)在程序中通过Subject编程方式进行权限控制
2)配置Filter实现URL级别粗粒度权限控制
3)配置代理,基于注解实现细粒度权限控制
4)在页面中使用shiro自定义标签实现,页面显示权限控制
Subject:表示当前操作的主体用户,是一个抽象的概念,Subject可以进行登录、退出、权限判断等动作,通常一个subject与一个线程进行关联。
Realm:表示验证的数据源,存储用户的安全数据,可以进行用户名和密码的匹配,及用户权限查询。
认证大致原理:
shiro的核心是java servlet规范中的filter,通过配置拦截器,使用拦截器链来拦截请求,如果允许访问,则通过。通常情况下,系统的登录、退出会配置拦截器。
登录的时候,调用subject.login(token),token是用户验证信息,这个时候会在Realm(继承AuthorizingRealm类)中doGetAuthenticationInfo方法中进行认证。这个时候会把用户提交的验证信息与数据库中存储的认证信息进行比较(先判断用户名是否正确,自定义查询数据库,然后执行new SimpleAuthenticationInfo(user,
user.getPassword(), getName());),
参数: // 参数一:保存在subject中的信息
// 参数二:securityManager自动用查到的password和用户输入的密码进行比较,密码一致,登录成功,错误则抛出异常
// 参数三:realm名称一致则允许访问,并在浏览器种下此次回话的cookie,在服务器端存储session信息。退出的时候,调用subject.logout(),会清除回话信息。
// 基于subject实现登录
Subject subject = SecurityUtils.g

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值