Apache Shiro基本概念了解

Apache Shiro是一个强大且易用的Java安全框架,用于身份验证、授权、加密和会话管理等。

Shiro 能做什么 

认证:验证用户的身份;
授权:对用户执行访问控制:判断用户是否被允许做某事;
管理:在任何环境下使用 Session API,即使没有 Web 或EJB 容器。
加密:以更简洁易用的方式使用加密功能,保护或隐藏数据防止被偷窥;
Realms:聚集一个或多个用户安全数据的数据源;
单点登录(SSO)功能:为没有关联到登录的用户启用 "Remember Me“ 服务;

                          图1-1 Shiro 的主要功能

Shiro 架构 3 个核心组件

3个核心组件:Subject, SecurityManager 和 Realms ;

                              图1-2 Shiro 3大核心组件

Subject :正与系统进行交互的人,或某一个第三方服务。所有 Subject 实例都被绑定到(且这是必须的)一个SecurityManager 上。

SecurityManager:Shiro 架构的心脏,用来协调内部各安全组件,管理内部组件实例,并通过它来提供安全管理的各种服务。当 Shiro 与一个 Subject 进行交互时,实质上是幕后的 SecurityManager 处理所有繁重的Subject 安全操作。

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

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。Shiro 提供了多种可用的 Realms 来获取安全相关的数据。如关系数据库(JDBC),INI 及属性文件等。可以定义自己 Realm 实现来代表自定义的数据源。

 

授权Authorization

授权:又称访问控制—控制谁有权限在应用程序中做什么。

授权检查的例子:用户是否能访问某个网页,编辑数据,或打使用这台打印机。

授权的三要素:权限、角色和用户 。

需要在应用程序中对用户和权限建立关联:通常的做法是将权限分配给角色,然后将角色分配给一个或多个用户。

权限:Shiro 安全机制最核心的元素。它在应用程序中明确声明了被允许的行为。一个格式良好的权限声明可以清晰表达出用户对该资源拥有的权限。在 Shiro 中主要通过通配符表达式来完成权限的描述。

Shiro 的权限Permissions

基础语法之简单的字符串:即用简单的字符串来表示一个权限,如:user (相当于:user:*);

基础语法之多层次管理:

    例如:user:query、user:edit     

    多个值:每个部件能够保护多个值。因此,除了授予用户 user:query 和 user:edit 权限外,也可以简单地授予他们一                                 个:user:query, edit ;

                          还可以用 * 号代替所有的值,如:user:* , 也可以写:*:query,表示某个用户在所有的领域都有 query 的权限

基础语法之实例级访问控制:

    这种情况通常会使用三个部件:域、操作、被付诸实施的实例。如:user:edit:manager

    也可以使用通配符来定义,如:user:edit:*、user:*:*、user:*:manager

    部分省略通配符:缺少的部件意味着用户可以访问所有与之匹配的值,比如:user:edit  等价于 user:edit :*、user  等价于 user:*:*

  注意:通配符只能从字符串的结尾处省略部件,也就是说 user:edit  并不等价于 user:*:edit

 

 

角色Role

角色:一个命名的实体, 通常代表一组行为或职责。 这些行为演化为在一个应用中能或者不能做的事情。角色通常分配给用户帐户。

一个角色拥有一个权限的集合。授权验证时,需要判断当前角色是否拥有指定的权限。这种角色权限可以对该角色进行详细的权限描述。 Shiro官方推荐使用这种方式。

  Shiro的三种授权方式:

  •   编写代码:在 Java 代码中用像 if 和 else 块的结构执行授权检查。
  •     JDK 的注解:可以添加授权注解给 Java 方法
  •   JSP 标签库:可以控制基于角色和权限的JSP 页面输出。

 

参考文献:

https://blog.csdn.net/weixin_42183336/article/details/81584467

https://www.cnblogs.com/libingbin/p/6016040.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值