shiro 简单介绍

本文介绍了Java安全框架Apache Shiro,可用于JavaSE和JavaEE环境,能完成认证、授权等功能。剖析了Shiro的API及工作原理,解答了认证内部处理顺序、权限授权时机等常见问题,还提到扩展功能的方法,最后比较了Shiro和Spring Security。

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

大家好,我是修真院 武汉分院 第十五期 java 学员,今天 我给大家分享的是——shiro 简单介绍

 

1.背景介绍

2.知识剖析

3.常见问题

4.编码实战

5.扩展思考

6.参考文献

7.更多讨论

 

1.背景介绍

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

2.知识剖析

 

shiro 的 API介绍:

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

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

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

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

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

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

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

Testing:提供测试支持;

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

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

 

应用程序角度查看 shiro 如何工作:

其中每个 api 的含义:

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

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

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

 

3.常见问题

 

SHIRO认证内部的处理顺序:

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方法来编写我们自定义的认证处理。

 

SHIRO在什么时候进行了权限授权:

访问权限页面而不是登录的时候

 

该如何扩展SHIRO的各种功能实现自己的业务逻辑:

只需要继承各种默认类然后@override即可

 

4.编码实战

5.扩展思考

Spring Security和Shiro的比较:

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

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

易于理解的 Java Security API;

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

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

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

 

6.参考文献

http://jinnianshilongnian.iteye.com/blog/2018398

https://blog.youkuaiyun.com/it_java_shuai/article/details/78054951

 

7.更多讨论

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值