这是我参与8月更文挑战的第5天,活动详情查看:8月更文挑战
一、权限管理
1.1 什么是权限管理?
不同身份的用户进入到系统所能够完成的操作是不相同的,我们对不同用户进行的可执行的操作的管理称之为权限管理。
1.2 如何实现权限管理?
权限管理设计
-
基于主页的权限管理(不同用户使用不同的主页,权限通过主页功能菜单进行限制)
- 适用于权限管理比较单一、用户少、每类用户权限固定
-
基于用户和权限的权限管理
- 可以实现权限的动态分配,但是不够灵活
-
基于角色的访问控制
- RBAC 基于角色的访问控制
二、安全框架简介
2.1 认证授权流程
- 认证:对用户的身份进行检查(登录验证)
- 授权:对用户的权限进行检查(是否有对应的操作权限)
- 流程示意图:
2.2 安全框架
-
帮助我们完成用户身份认证及权限检查功能框架
-
常用的安全框架:
- Shiro:Apache Shiro是一个功能强大并且易用的Java安全框架 (小而简单)
- Spring Security:基于Spring的一个安全框架,依赖Spring
- OAuth2:第三方授权登录
- 自定义安全认证中心
2.3 Shiro
- Apache Shiro是一个功能强大并且易用的Java安全框架
- 可以完成用户认证、授权、密码及会话管理
- 可以在任何的应用系统中使用(主要针对单体项目的权限管理)
三、Shiro的工作原理
3.1 Shiro的核心功能
-
Anthentication 认证,验证用户是否有相应的身份—登录认证;
-
Authorization 授权,即权限验证;对已经通过认证的用户检查是否具有某个权限或者角色,从而控制是否能够进行某种操作;
-
Session Managment 会话管理,用户在认证成功之后创建会话,在没有退出之前,当前用户的所有信息都会保存在这个会话中;可以是普通的JavaSE应用,也可以是web应用;
-
Cryptography 加密,对敏感信息进行加密处理,shiro就提供这种加密机制;
-
支持的特性:
- Web Support — Shiro提供了过滤器,可以通过过滤器拦截web请求来处理web应用的访问控制
- Caching 缓存支持,shiro可以缓存用户信息以及用户的角色权限信息,可以提高执行效率
- Concurrency shiro支持多线程应用
- Testing 提供测试支持
- Run As 允许一个用户以另一种身份去访问
- Remeber Me
-
说明:Shiro是一个安全框架,不提供用户、权限的维护(用户的权限管理需要我们自己去设计)
3.2 Shiro核心组件
Shiro三大核心组件:Subject、Security Manager、Realms
-
Subject,表示待认证和授权的用户
-
Security Manager,它是Shiro框架的核心,Shiro就是通过Security Manager来进行内部实例的管理,并通过它来提供安全管理的各种服务。
- Authenticator,认证器
- Anthorizer,授权器
- SessionManager,会话管理器
- CacheManager,缓存管理器
-
Realm,相当于Shiro进行认证和授权的数据源,充当了Shiro与安全数据之间的“桥梁”或者“连接器”。也就是说,当对用户进行认证(登录)和授权(访问控制)验证时,Shiro会用应用配置的Realm中查找用户及其权限信息。
3.3过滤器权限拦截器
| 过滤器简称 | 对应的java类 |
|---|---|
| anon | org.apache.shiro.web.filter.authc.AnonymousFilter |
| authc | org.apache.shiro.web.filter.authc.FormAuthenticationFilter |
| authcBasic | org.apache.shiro.web.filter.authc.BasicHttpAuthenticationFilter |
| perms | org.apache.shiro.web.filter.authz.PermissionsAuthorizationFilter |
| port | org.apache.shiro.web.filter.authz.PortFilter |
| rest | org.apache.shiro.web.filter.authz.HttpMethodPermissionFilter |
| roles | org.apache.shiro.web.filter.authz.RolesAuthorizationFilter |
| ssl | org.apache.shiro.web.filter.authz.SslFilter |
| user | org.apache.shiro.web.filter.authc.UserFilter |
| logout | org.apache.shiro.web.filter.authc.LogoutFilter |
3.4 shiro标签