SpringSecurity基础-认证和授权概述

简介: RBAC是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

1.认证授权概述

为了给学习SpringSecurity打下基础,我们来回顾一下传统的认证授权流程

1.1.什么是认证

认证是对主体/用户身份的确认,在我们的生活中随处可见认证场景,如:小区门禁卡,人脸识别,指纹识别等都是对用户身份的确认,在传统的应用中我们通常使用用户名/用户ID和密码来进行用户的身份确认,即登录,但登录的方式不仅限制于用户名/密码的方式,认证是我们应用的第一道安全门,所以对于整个系统的安全来说显得极其重要。

1.2.什么是授权

控制不同的用户访问不同的权限 ,用户认证成功后,就可以对某些资源进行访问,但是不同的用户有不同的资源访问权利,那么对用户的授权也都不一样。如:公司老板拥有对公司的所有权限,而部门主管只能有对自己管理的部门的权限,所以在程序中授权的过程就是赋予不同用户不同权限的过程。

1.3.什么是RBAC

RBAC是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。

举例:可以把部门的展示,添加,修改,删除等资源或功能打包成角色“部门管理”,然后把“部门管理”这个角色赋予某个用户,那么这个用户就是部门管理员,拥有部门的相关权限。

RBAC 认为授权实际上是Who 、What 、How 三元组之间的关系,也就是Who 对What 进行How 的操作。

  • 主体(Who ) :是权限的拥有者或主体(如:User,Role)。
  • 资源 (what): 是操作或对象,如:页面,菜单,按钮,控制器(controller,hanler)等
  • 权限(how) :具体的权限, 如:张三可以删除员工。 那么删除员工就是一个权限

2.基于session的认证授权

2.1.认证流程

基于Session的认证方案即当用户认证成功之后将认证信息缓存在session中,主体(用户)在发起资源访问时需要进行是否做过认证校验,即检查session中是否有缓存认证信息。详细的认证流程如下图:

认证流程

  1. 客户端(浏览器)提交用户名和密码发起认证请求
  2. 请求中的认证信息被封装成对象(User),控制层(controller)接收到认证请求
  3. Controller调用服务层(Service)的认证逻辑进行认证,传入User
  4. Service调用持久层(Dao)根据传入的User中的账号查询数据库中的认证信息(User)
  5. Service获取到持久层返回的User和请求传入的User进行密码比对
  6. 认证成功将认证信息(User)和用户的权限信息通过UserContext存储到(Session中)
  7. 返回认证结果给客户端
认证检查

当用户再次发起请求,拦截器会负责检查是否已经完成认证,通过UserContext从Session中获取User对象进行判断,如果没认证就会返回错误信息,如果已经完成认证就直接访问url对应的资源,返回资源给客户端。

2.2.授权流程

授权是约束用户对资源的访问权限,通过系统事先需要对资源做好授权操作,即约定好哪些资源需要什么样的权限才能访问。并且平台的用户需要被分配好其拥有的权限(用户/角色/权限) , 在用户认证成功之后即为用户加载其拥有的权限列表和认证信息一起封装成对象缓存到session中 ,当用户发起资源请求时,除了需要做认证检查还需要做权限检查,即判断当前认证用户所拥有的权限列表中是否拥有当前访问的资源所需要的权限。详细授权流程如下如:

  1. 认证通过,加载当前用户的权限列表,和认证信息一起封装成对象存储到session中
  2. 服务端登录检查拦截器,校验是否已经认证(从session获取认证信息)
  3. 服务端权限检查拦截器,校验是否拥有访问权限(用户的权限列表是否包含资源所需要的权限)
目录
相关文章
|
4月前
|
安全 Java 数据库
SpringSecurity认证授权及项目集成
本文介绍了基于Spring Security的权限管理框架,涵盖认证、授权与鉴权核心概念,通过快速入门示例演示集成流程,并结合数据库实现用户认证。进一步扩展实现正常登录,JWT登录及鉴权管理器,实现灵活的安全控制,适用于前后端分离项目中的权限设计与实践。
414 4
|
安全 Java 网络安全
后端进阶之路——综述Spring Security认证,授权(一)
后端进阶之路——综述Spring Security认证,授权(一)
|
2月前
|
移动开发 小程序 数据可视化
一次开发多端覆盖!Uni+PHP 源码搭建校园外卖跑腿平台,小程序 + H5+App 全搞定!
UniApp+PHP校园外卖跑腿源码,一次开发覆盖小程序、H5、App,1小时快速上线!支持外卖+跑腿双功能,高并发不卡顿,0技术门槛,全开源可定制,助力创业者低成本抢占校园服务市场,轻松运营千亿蓝海。
|
9月前
|
存储 安全 Java
Spring Security 入门与详解
Spring Security 是 Spring 框架中的核心安全模块,提供认证、授权及防护功能。本文详解其核心概念,包括认证(Authentication)、授权(Authorization)和过滤器链(Security Filter Chain)。同时,通过代码示例介绍基本配置,如 PasswordEncoder、UserDetailsService 和自定义登录页面等。最后总结常见问题与解决方法,助你快速掌握 Spring Security 的使用与优化。
2284 0
|
6月前
|
人工智能 自然语言处理 测试技术
掌握这5个要点,选对Embedding模型助力RAG系统
三桥君深入解析RAG系统中的Embedding模型选择问题,探讨其在语义理解与检索中的关键作用,并结合任务需求、资源条件等提供实用选型建议。
1241 0
|
存储 缓存 NoSQL
希音面试:亿级用户 日活 月活,如何统计?(史上最强 HyperLogLog 解读)
本文详细介绍了如何使用Redis的各种数据结构(如Set、Bitmap、HyperLogLog)来统计网站的日活(DAU)和月活(MAU)用户数。作者通过实际案例和代码示例,系统地讲解了这些数据结构的原理和应用场景,特别是HyperLogLog在处理亿级用户数据时的优势。文章还深入解析了HyperLogLog的数学原理和底层数据结构,帮助读者更好地理解和应用这一高效的数据统计工具。此外,文章还提供了多个相关面试题和参考资料,适合准备面试的技术人员阅读。
|
存储 安全 数据安全/隐私保护
OAuth 2.0 的授权机制
【10月更文挑战第5天】
969 2
|
安全 前端开发 Java
针对 SpringSecurity 鉴权流程做了一个详细分析,让你明白它是如何执行的!
针对 SpringSecurity 鉴权流程做了一个详细分析,让你明白它是如何执行的!
1052 0
|
缓存 运维 Ubuntu
掌控软件管理:详解 APT、YUM 和 DNF 的使用方法
掌控软件管理:详解 APT、YUM 和 DNF 的使用方法
1464 0
|
Java 数据库连接 网络安全
已解决 IDEA Maven 项目中 “Could not find artifact“ 问题的常见情况和解决方案
已解决 IDEA Maven 项目中 “Could not find artifact“ 问题的常见情况和解决方案
16134 0