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

开发 前端
本篇介绍Spring Boot 中使用 Spring AOP 实现接口鉴权的一些常见方法,具体使用哪种方法取决于具体的应用场景和需求。

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

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

定义注解:

@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface Auth {
    String value();
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.

定义切面类:

@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");
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.

在接口方法上添加注解:

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @GetMapping("/user/{id}")
    @Auth("user:view")
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

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");
        }
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.

在接口方法上添加注解:

@RestController
public class UserController {
    @Autowired
    private UserService userService;
    
    @GetMapping("/user/{id}")
    @Auth("user:view")
    public User getUser(@PathVariable Long id) {
        return userService.getUser(id);
    }
}
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.

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

责任编辑:姜华 来源: 今日头条
相关推荐

2022-02-08 17:07:54

Spring BooSpring Aop日志记录

2009-06-22 15:10:00

java 编程AOP

2023-08-03 08:06:50

2009-06-15 16:23:39

Eclipse中使用SEclipse RCP

2020-03-20 14:48:46

SpringBootJava分布式

2023-10-28 16:22:21

Go接口

2023-11-26 09:10:34

WebSocketgreeting​在线用户

2025-02-26 13:00:00

SpringBootJava开发

2023-03-29 08:24:30

2009-06-19 11:09:27

Spring AOP

2022-09-26 10:01:04

SpringAOP日志

2023-07-17 18:42:47

gRPCDemo项目

2022-05-31 08:36:41

微服务网关鉴权

2021-03-03 13:25:35

CookieSessionToken

2021-09-02 07:00:32

鉴权Web 应用Cookie-sess

2024-09-02 00:27:51

SpringAOP自定义

2021-03-01 23:26:41

日志Spring BootAOP

2025-02-27 13:00:00

SpringBoot数据鉴权代码

2023-04-17 08:56:29

微服务鉴权业务

2018-08-23 16:18:59

点赞
收藏

51CTO技术栈公众号