shiro框架简单介绍

本文深入解析Apache Shiro框架,一个强大的Java安全框架,用于认证、授权、会话管理和加密。文章涵盖Shiro的工作原理,包括Subject、SecurityManager和Realm的概念,以及常见问题和解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

大家好,我是IT修真院武汉分院第15期学员,一枚正直善良的JAVA程序员。

今天给大家分享一下,java复盘中需要使用的shiro框架简单介绍

 


1.背景介绍

 

Apache Shiro是Java的一个安全框架。可以用在 JavaSE 和 JavaEE 环境,去帮助 完成:认证、授权、加密、会话管理、与Web集成、缓存等。

 


2.知识剖析

Authentication:身份认证/登录,验证用户是不是拥有相应的身份

Authorization:授权,即权限验证,验证某个已认证的用户是否拥有某个权限;即判断用户是否能做事情,常见的如:验证某个用户是否拥有某个角色。

Session Manager:会话管理,即用户登录后就是一次会话,在没有退出之前,它的所有信息都在会话中

Cryptography:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;

Web Support:Web支持,可以非常容易的集成到Web环境

Caching:缓存,比如用户登录后,其用户信息、拥有的角色/权限不必每次去查,这样可以提高效率

Concurrency:shiro支持多线程应用的并发验证,即如在一个线程中开启另一个线程,能把权限自动传播过去

Testing:提供测试支持

Run As:允许一个用户假装为另一个用户的身份进行访问

Remember Me:记住我,这个是非常常见的功能,即一次登录后,下次再来的话不用登录了。

 

其中每个 api 的含义:

Subject:主体,代表了当前“用户”,这个用户不一定是一个具体的人,与当前应用交互的任何东西都是Subject;所有Subject都绑定到SecurityManager,与Subject的所有交互都会委托给SecurityManager执行

SecurityManager:安全管理器;即所有与安全有关的操作都会与SecurityManager交互;它是Shiro的核心,它负责与后边介绍的其他组件进行交互,类似于 DispatcherServlet

Realm:域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说SecurityManager要验证用户身份(权限),那么它需要从Realm获取相应的用户进行去确定用户身份是否合法(是否有权限);可以把Realm看成DataSource,即安全数据源。

 

 


3.常见问题

问题一:SHIRO认证内部的处理顺序
问题二:SHIRO在什么时候进行了权限授权
问题三:该如何扩展SHIRO的各种功能实现自己的业务逻辑

 


4.解决方案

 

回答一:
1、应用程序构建了一个终端用户认证信息的AuthenticationToken 实例后,调用Subject.login方法。

2、在认证开始时,会委托应用程序设置的securityManager实例调用securityManager.login(token)方法。

3、SecurityManager接受到token信息后会委托内置的Authenticator的实例,对设置的Realm实例进行适配

4、在Realm被调用后,AuthenticationStrategy将对每一个Realm的结果作出响应。

5、判断每一个Realm是否支持提交的token,如果支持,Realm将调用getAuthenticationInfo(token); 该方法就是实际认证处理,我们通过覆盖Realm的doGetAuthenticationInfo方法来编写我们自定义的认证处理。

 

回答二:访问权限页面而不是登录的时候

 

回答三:只需要继承各种默认类然后@override即可<p/>

 

 


5.编码实战

详见腾讯视频

 

 


6.扩展思考

 

Spring Security和Shiro的比较

1.首先Shiro较之 Spring Security,Shiro在保持强大功能的同时,还在简单性和灵活性方面拥有巨大优势。

2.Shiro是一个强大而灵活的开源安全框架,能够非常清晰的处理认证、授权、管理会话以及密码加密。如下是它所具有的特点:

1.易于理解的 Java Security API。

2.对角色的简单的签权(访问控制),支持细粒度的签权,

3.内置的基于 POJO 企业会话管理,适用于 Web 以及非 Web 的环境。

4.不跟任何的框架或者容器捆绑,可以独立运行。

 

 


7.参考文献

 

参考一:http://jinnianshilongnian.iteye.com/blog/2018398

参考二:https://blog.youkuaiyun.com/it_java_shuai/article/details/78054951

 


8.更多讨论

今天的分享就到这里啦,欢迎大家提问和探讨!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值