【LSP】走进shiro,构建安全的应用程序

编程开发   © 文章版权由 admin 解释,禁止匿名转载

#楼主# 2020-10-6

写在前面
在最近的一个项目当中,我们基于Shiro实现我们系统的认证和授权。借此机会,写几篇博客,总结一下在本次实践当中遇到的问题,和较全面地学习一下Shiro的知识点,

1. 权限管理
权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户访问而且只能访问授权访问的资源。

权限管理主要分为两个部分,一是身份认证(authentication),二是授权(authorization)。

2. 实现方案与模型
目前主流的解决方案spring security+JWT或者Shiro+JWT方案。当然也有相关团队(公司)是自己编写过滤器进行访问控制。但这并不值得推荐,除非你设计的权限管理方案能经得起生产环境的考验。

如果大家需要了解关于spring security的相关内容,可以阅读我spring security的相关文章。

权限管理模型的话,主要有这么几种:

自主访问控制(DAC: Discretionary Access Control)。一个典型的例子就是windows操作系统的权限管理。DAC 最大的缺陷就是对权限控制比较分散,不便于管理,比如说简单地对一组文件设置统一的权限并授予指定的一组用户。

强制访问控制模型(MAC: Mandatory Access Control)。MAC为了弥补DAC而生,MAC给用户和资源分别数字化标记其权限等级。当用户访问某一资源时,只有它的权限等级高于或等于资源的权限等级时,才能访问,否则拒绝访问。比如存在某一资源404.MP4,资源等级为1024.存在用户Ferrayman,其权限等级为256,存在用户boss,其权限等级为2048.那么,boss就能正常访问资源404.MP4,而Ferrayman则无权访问。

基于角色的访问控制模型(RBAC: Role-based Access Control),即给用户分配角色,角色下对应一定的资源,用户对其角色下的资源具有访问权限。RBAC细分为RBAC0、RBAC1、RBAC2、RBAC3几个版本。



我们主要采用的也是RBAC模型。

3. Shiro是什么?
Apache Shiro™ is a powerful and easy-to-use Java security framework that performs
authentication, authorization, cryptography, and session management. With Shiro’s
easy-to-understand API, you can quickly and easily secure any application – from the
smallest mobile applications to the largest web and enterprise applications.
Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。

3.1 Shiro组成
Shiro三大组件:Subject, SecurityManager 和 Realms.

3.1.1 Subject:
即“当前主体”。在Shiro中,Subject这一概念并不仅仅指人,也可以是第三方进程、后台帐户(Daemon Account)或其他类似事物。它仅仅意味着“当前跟软件交互的东西”。Subject代表了当前用户的安全操作,SecurityManager则管理所有用户的安全操作。

它主要由身份信息Principal和凭证Principals组成。Principal可以理解为主体在系统中的账号,且是具有唯一性的。Principals可以理解为主体在当前系统账户所对应的密码、证书。

3.1.2 SecurityManager:
它是Shiro框架的核心,典型的Facade模式,Shiro通过SecurityManager来管理内部组件实例,并通过它来提供安全管理的各种服务。

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

从这个意义上讲,Realm实质上是一个安全相关的DAO:它封装了数据源的连接细节,并在需要时将相关数据提供给Shiro。当配置Shiro时,你必须至少指定一个Realm,用于认证和(或)授权。配置多个Realm是可以的,但是至少需要一个。

11楼
不意 2020-10-7
这不是氵吗[滑稽]
12楼
不意 2020-10-7
直接移动[滑稽]
习惯了就不难[滑稽]
14楼
不意 2020-10-7
我大大小小五十万左右吧
15楼
不意 2020-10-7
[滑稽][心碎]
16楼
不意 2020-10-7
你读什么专业
太极使用就好多[滑稽]
18楼
不意 2020-10-7
[心碎][滑稽]不会啊
19楼
不意 2020-10-7
听过,没用过[滑稽]
只要不是盗的问题都不大[滑稽]

评论

登录后才可发表内容
  • 主题

    88

  • 帖子

    1748

  • 关注者

    0

Copyright © 2019 凯特网.   Powered by HYBBS 2.3.4  

Runtime:0.0397s Mem:2181Kb