SpringBoot中使用自定义注解和拦截器实现简单的权限控制

SpringBoot中使用自定义注解和拦截器实现简单的权限控制

本文首发在我的个人站点:追逐日落,欢迎大家前去参观~

前言

众所周知,作为系统的最后一道防线,对于一些重要操作(crud等),后端默认接收的所有的请求都是“不可信”的,除了确认用户登录状态之外,还要对接收的数据进行一系列的合法性校验等等,即使已经在前端页面对用户输入信息做了一定的限制。因为请求可以伪造,也可能被拦截篡改,即使在正常情况下,用户也可能因为误操作或者恶意行为发送不合法的请求。

如果多角色系统的接口不做权限校验的话,那无疑是在“裸奔”,任何一个普通的登录用户都能调用所有的接口。

Q:什么是权限控制?

A:让特定的用户只能访问特定的资源。

在实际项目中,如果权限控制需要复杂的逻辑或者需要非常细致的权限划分,可能需要借助专门的权限框架,主流的权限框架有

  • Spring Security https://spring.io/projects/spring-security

    Spring Security 是一个功能强大、高度可定制的身份验证和访问控制框架。它是确保基于 Spring 的应用程序安全的事实标准。
    Spring Security 是一个专注于为 Java 应用程序提供身份验证和授权的框架。与所有 Spring 项目一样,Spring Security 的真正威力在于它可以轻松扩展以满足自定义需求

  • Apache Shiro https://shiro.apache.org/

    Apache Shiro™ 是一个功能强大且易于使用的 Java 安全框架,可执行身份验证、授权、加密和会话管理。利用 Shiro 易于理解的 API,您可以快速、轻松地保护任何应用程序的安全–从最小的移动应用程序到最大的网络和企业应用程序。

虽然上述的框架功能十分完备,但是对于只有两三个角色的系统来说,杀鸡焉用宰牛刀啊,通过使用SpringBoot框架提供的自定义注解和拦截器功能,可以轻松地实现对不同用户角色的访问权限控制。

本文用例说明:

系统有三种角色,管理员、教师、学生。

在数据库用户表中,用户类型字段以tinyint存储,3代表管理员,2代表教师,1代表学生。

功能需求:有些接口只能管理员访问,有些接口可以让管理员和老师访问,有些接口只能学生访问。

定义权限常量

在项目下新建constant包,并新建接口用于定义角色权限常量

public interface UserConstant {
   
    int USER_TYPE_ADMIN = 3; // 管理员
    int USER_TYPE_TEACHER = 2; // 教师
    int USER_TYPE_STUDENT = 1; // 学生
    int USER_TYPE_LOGIN = 0; // 登录未认证身份用户
}

定义Access注解

新建an

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值