您当前的位置:首页 > 电脑百科 > 程序开发 > 框架

在 SpringBoot 中使用 Spring AOP 实现接口鉴权

时间:2023-03-30 12:57:37  来源:今日头条  作者:理工男二号

在 Spring Boot 中使用 Spring AOP 实现接口鉴权可以帮助我们对接口的调用进行权限控制。下面是一些常见的方法:

1 基于注解的方法:在接口方法上添加自定义注解,通过定义切面类实现对注解的拦截和处理。例如:

定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Auth {
    String value();
}

定义切面类:

@Component
@Aspect
public class AuthAspect {
    @Autowired
    private AuthService authService;
    
    @Pointcut("@annotation(com.example.Auth)")
    public void authPointcut() {}
    
    @Before("authPointcut() && @annotation(auth)")
    public void authBefore(JoinPoint joinPoint, Auth auth) {
        String permission = auth.value();
        if (!authService.checkPermission(permission)) {
            throw new UnauthorizedException("Unauthorized access");
        }
    }
}

在接口方法上添加注解:

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @GetMApping("/user/{id}")
    @Auth("user:view")
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }
}

2 基于切入点表达式的方法:通过定义切入点表达式,对指定接口进行拦截和处理。例如:

定义切面类:

@Component
@Aspect
public class AuthAspect {
    @Autowired
    private AuthService authService;
    
    @Pointcut("execution(* com.example.UserService.*(..))")
    public void userServicePointcut() {}
    
    @Before("userServicePointcut()")
    public void userServiceBefore(JoinPoint joinPoint) {
        MethodSignature signature = (MethodSignature) joinPoint.getSignature();
        Method method = signature.getMethod();
        Auth auth = method.getAnnotation(Auth.class);
        if (auth != null && !authService.checkPermission(auth.value())) {
            throw new UnauthorizedException("Unauthorized access");
        }
    }
}

在接口方法上添加注解:

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @GetMapping("/user/{id}")
    @Auth("user:view")
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }
}

以上是 Spring Boot 中使用 Spring AOP 实现接口鉴权的一些常见方法,具体使用哪种方法取决于具体的应用场景和需求。



Tags:SpringBoot   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
公司用了六年的 SpringBoot 项目部署方案,稳得一批!
本篇和大家分享的是springboot打包并结合shell脚本命令部署,重点在分享一个shell程序启动工具,希望能便利工作。 profiles指定不同环境的配置 maven-assembly-plugin打发布压...【详细内容】
2024-01-10  Search: SpringBoot  点击:(163)  评论:(0)  加入收藏
SpringBoot 中的热部署和热加载
在Spring Boot开发调试中,如果我们每修改一行代码都需要重启调试,可能会比较耗时。Spring Boot团队针对这个问题提供了spring-boot-devtools(简称:Devtools)插件,试图提高开发和调...【详细内容】
2023-11-06  Search: SpringBoot  点击:(250)  评论:(0)  加入收藏
SpringBoot 调用外部接口的四种方式
1、简介在Spring-Boot项目开发中,当本模块的代码需要访问外面模块接口,或外部url链接的需求的时候, 需要使用网络连接调用,下面提供了四种方式(排除dubbo的方式)供大家选择。方式...【详细内容】
2023-11-06  Search: SpringBoot  点击:(315)  评论:(0)  加入收藏
Springboot 框架中事件监听和发布机制详细介绍
事件监听和发布是Spring Framework中的一种机制,用于实现松散耦合的组件之间的通信。下面是事件监听和发布的详细过程:事件发布的过程: 创建事件对象:首先,您需要创建一个事件类,...【详细内容】
2023-11-02  Search: SpringBoot  点击:(264)  评论:(0)  加入收藏
Springboot 中的 PropertySource 管理配置属性的机制
Spring Framework 中的 PropertySource 是一种用于管理配置属性的机制,它允许你将配置信息从各种来源(如属性文件、环境变量、数据库等)加载到应用程序中。在 Spring 中,Propert...【详细内容】
2023-10-29  Search: SpringBoot  点击:(228)  评论:(0)  加入收藏
如何将本地jar文件打包到 springboot 执行jar文件中
这一系列课程将包含Spring Boot 许多关键的技术和工具,包括 Mybatis-Plus、Redis、Mongodb、MinIO、Kafka、MySQL、消息队列(MQ)、OAuth2 等相关内容。如何将本地jar文件打包到...【详细内容】
2023-10-27  Search: SpringBoot  点击:(271)  评论:(0)  加入收藏
Java面试题之SpringBoot 框架
谈谈怎么理解 SpringBoot 框架 Spring Boot 是 Spring 开源组织下的子项目, 是 Spring 组件一站式解决方案, 主要是 简化了使用 Spring 的难度, 简省了繁重的配置, 提供了各种启...【详细内容】
2023-09-28  Search: SpringBoot  点击:(212)  评论:(0)  加入收藏
SpringBoot 并发编程学习历程
本教程大概目录: 模拟单线程情节 用Callable实现 并发编程 用DeferedResult实现异步处理###模拟单线程情节。/** * Created by Fant.J. */@RestController@Slf4jpublic class...【详细内容】
2023-09-27  Search: SpringBoot  点击:(207)  评论:(0)  加入收藏
Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
RestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。我之前的HTTP开发是用apache的Htt...【详细内容】
2023-09-14  Search: SpringBoot  点击:(317)  评论:(0)  加入收藏
16个SpringBoot 扩展接口
1.背景Spring的核心思想就是容器,当容器refresh的时候,外部看上去风平浪静,其实内部则是一片惊涛骇浪,汪洋一片。Springboot更是封装了Spring,遵循约定大于配置,加上自动装配的机...【详细内容】
2023-08-28  Search: SpringBoot  点击:(134)  评论:(0)  加入收藏
▌简易百科推荐
Web Components实践:如何搭建一个框架无关的AI组件库
一、让人又爱又恨的Web ComponentsWeb Components是一种用于构建可重用的Web元素的技术。它允许开发者创建自定义的HTML元素,这些元素可以在不同的Web应用程序中重复使用,并且...【详细内容】
2024-04-03  京东云开发者    Tags:Web Components   点击:(8)  评论:(0)  加入收藏
Kubernetes 集群 CPU 使用率只有 13% :这下大家该知道如何省钱了
作者 | THE STACK译者 | 刘雅梦策划 | Tina根据 CAST AI 对 4000 个 Kubernetes 集群的分析,Kubernetes 集群通常只使用 13% 的 CPU 和平均 20% 的内存,这表明存在严重的过度...【详细内容】
2024-03-08  InfoQ    Tags:Kubernetes   点击:(12)  评论:(0)  加入收藏
Spring Security:保障应用安全的利器
SpringSecurity作为一个功能强大的安全框架,为Java应用程序提供了全面的安全保障,包括认证、授权、防护和集成等方面。本文将介绍SpringSecurity在这些方面的特性和优势,以及它...【详细内容】
2024-02-27  风舞凋零叶    Tags:Spring Security   点击:(54)  评论:(0)  加入收藏
五大跨平台桌面应用开发框架:Electron、Tauri、Flutter等
一、什么是跨平台桌面应用开发框架跨平台桌面应用开发框架是一种工具或框架,它允许开发者使用一种统一的代码库或语言来创建能够在多个操作系统上运行的桌面应用程序。传统上...【详细内容】
2024-02-26  贝格前端工场    Tags:框架   点击:(47)  评论:(0)  加入收藏
Spring Security权限控制框架使用指南
在常用的后台管理系统中,通常都会有访问权限控制的需求,用于限制不同人员对于接口的访问能力,如果用户不具备指定的权限,则不能访问某些接口。本文将用 waynboot-mall 项目举例...【详细内容】
2024-02-19  程序员wayn  微信公众号  Tags:Spring   点击:(39)  评论:(0)  加入收藏
开发者的Kubernetes懒人指南
你可以将本文作为开发者快速了解 Kubernetes 的指南。从基础知识到更高级的主题,如 Helm Chart,以及所有这些如何影响你作为开发者。译自Kubernetes for Lazy Developers。作...【详细内容】
2024-02-01  云云众生s  微信公众号  Tags:Kubernetes   点击:(50)  评论:(0)  加入收藏
链世界:一种简单而有效的人类行为Agent模型强化学习框架
强化学习是一种机器学习的方法,它通过让智能体(Agent)与环境交互,从而学习如何选择最优的行动来最大化累积的奖励。强化学习在许多领域都有广泛的应用,例如游戏、机器人、自动驾...【详细内容】
2024-01-30  大噬元兽  微信公众号  Tags:框架   点击:(68)  评论:(0)  加入收藏
Spring实现Kafka重试Topic,真的太香了
概述Kafka的强大功能之一是每个分区都有一个Consumer的偏移值。该偏移值是消费者将读取的下一条消息的值。可以自动或手动增加该值。如果我们由于错误而无法处理消息并想重...【详细内容】
2024-01-26  HELLO程序员  微信公众号  Tags:Spring   点击:(86)  评论:(0)  加入收藏
SpringBoot如何实现缓存预热?
缓存预热是指在 Spring Boot 项目启动时,预先将数据加载到缓存系统(如 Redis)中的一种机制。那么问题来了,在 Spring Boot 项目启动之后,在什么时候?在哪里可以将数据加载到缓存系...【详细内容】
2024-01-19   Java中文社群  微信公众号  Tags:SpringBoot   点击:(86)  评论:(0)  加入收藏
花 15 分钟把 Express.js 搞明白,全栈没有那么难
Express 是老牌的 Node.js 框架,以简单和轻量著称,几行代码就可以启动一个 HTTP 服务器。市面上主流的 Node.js 框架,如 Egg.js、Nest.js 等都与 Express 息息相关。Express 框...【详细内容】
2024-01-16  程序员成功  微信公众号  Tags:Express.js   点击:(88)  评论:(0)  加入收藏
站内最新
站内热门
站内头条