Spring spring

Spring中文网站 > Spring Security > Spring Security是什么 Spring Security怎么实现权限管理
Spring Security是什么 Spring Security怎么实现权限管理
发布时间:2026/08/20 11:41:11

品牌型号:联想ThinkPad X1

系统:Windows10家庭版

软件版本:Spring 5.3.7

在后端开发中权限管理几乎是我们每个项目都绕不开的功能,谁能访问哪个接口,能操作哪些数据,都需要有一套机制去管控。之前有很多项目喜欢用拦截器加过滤器去做权限校验,能用是能用,但代码越写越乱,维护起来很麻烦。后来接触到Spring Security之后才发现,这套框架把认证和授权的很多通用逻辑都封装好了,它的上手门槛确实不低,配置多,很多人刚接触的时候容易被绕晕。下面就给大家介绍一下Spring Security是什么,Spring Security怎么实现权限管理的相关内容。

一、Spring Security是什么

Spring Security是Spring生态里用来做认证和授权的一套安全框架。简单来说,就是解决“你是谁”和“你能干什么”这两个问题。“认证”就是登录校验,用于判定用户身份是否合法。“授权”就是权限控制,判定用户能否访问指定接口、操作对应数据。

这套框架的核心是一条过滤器链。请求进来之后不会直接到Controller,而是先经过一系列Filter,像UsernamePasswordAuthenticationFilter管账号密码登录。BasicAuthenticationFilter管HTTP Basic认证以及处理异常的ExceptionTranslationFilter,每个过滤器各司其职,层层校验完了才会放行到业务代码中。

BasicAuthenticationFilter管理HTTP Basic认证
图1:BasicAuthenticationFilter管理HTTP Basic认证

Spring Security中有几个绕不开的核心组件,这几个组件配合着用,才能把登录鉴权流程跑通。SecurityContextHolder用来存当前登录用户的信息,整个请求生命周期里都能拿到,AuthenticationManager负责处理认证逻辑,校验用户名密码对不对,AccessDecisionManager负责授权判断,决定当前用户有没有权限访问目标资源。

配置SecurityFilterChain
图2:配置SecurityFilterChain

跟之前我们自己手写拦截器加数据库查询的方式比起来,Spring Security的好处是把这套流程标准化了加密算法、会话管理、防止CSRF攻击这些安全细节框架都已经考虑到了。

手写拦截器
图3:手写拦截器

二、Spring Security怎么实现权限管理

上文我们给大家简单介绍了什么是Spring Security,那么具体怎么实现呢?常见的思路是基于角色的访问控制,我们可以给用户分配角色,再给角色绑定权限,这样管理起来灵活很多,加个新用户只要分配对应角色就行,不用一个个去配权限点。

给角色分配权限
图4:给角色分配权限

Spring Security提供了几种方式做权限校验,可以在配置类里通过HttpSecurity去声明哪些路径需要什么角色才能访问。比如管理后台的接口只允许超管角色进,普通用户接口只要登录就能访问,这种配置写在SecurityFilterChain里,项目启动时就能确定权限规则。

配置不同URL的权限
图5:配置不同URL的权限

也可以考虑做方法级别的注解校验,像@PreAuthorize和@Secured,直接标注在Service或者Controller的方法上,判断当前用户有没有对应权限,这种方式粒度更细,适合业务逻辑复杂的权限判断,比如同时要求角色加数据归属两个条件都满足才能操作。

判断当前用户有没有对应权限
图6:判断当前用户有没有对应权限

我们一般是把用户的角色和权限信息存在数据库里的,项目里常见的表结构是用户表、角色表、权限表,再加两张关联表把用户和角色、角色和权限对应起来。登录成功之后,Spring Security会把这些权限信息封装进Authentication对象里,存到SecurityContextHolder中,后续每次请求鉴权都是从这里面取数据去比对,不用每次都查一遍数据库。

以上就是Spring Security是什么,Spring Security怎么实现权限管理的全部内容了。我们梳理下来会发现Spring Security的核心其实就是认证和授权这两件事。靠一条过滤器链把登录校验和权限判断串起来,SecurityContextHolder存身份信息,AuthenticationManager管登录校验,AccessDecisionManager管权限判断,这几个组件配合着才能跑通整个流程。在实现权限管理的时候,给用户分配角色是主流思路,配置类里声明路径权限,方法上用注解做细粒度校验,两种方式结合着用比较灵活。

读者也访问过这里:
180 1563 6924