Spring Boot AOP 拦截 IP

在实际的开发过程中,我们可能会遇到需要根据 IP 地址进行访问控制的情况。Spring Boot 提供了 AOP(Aspect-Oriented Programming)的方式来实现这一功能,通过在方法执行前后插入代码,实现对 IP 地址的拦截和验证。

AOP 概述

AOP 是一种编程范式,可以在程序运行期间动态地将代码切入到类的指定方法的指定位置上。在 Spring Boot 中,AOP 可以用来实现日志记录、事务管理、性能监控等功能。

如何拦截 IP 地址

我们可以通过 AOP 和 Spring Boot 提供的 @Before@After 注解来实现 IP 地址的拦截。下面我们通过一个简单的示例来演示如何实现这一功能。

1. 添加依赖

首先,在 pom.xml 文件中添加 AOP 和 Web 模块的依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>

2. 创建切面类

创建一个切面类,在方法执行前后打印请求的 IP 地址:

@Aspect
@Component
public class IPAspect {

    @Before("execution(* com.example.demo.controller.*.*(..))")
    public void before(JoinPoint joinPoint) {
        HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
        String ip = request.getRemoteAddr();
        System.out.println("IP Address: " + ip);
    }

    @After("execution(* com.example.demo.controller.*.*(..))")
    public void after(JoinPoint joinPoint) {
        System.out.println("Method executed successfully");
    }
}

3. 配置 AOP

在 Spring Boot 应用主类中加上 @EnableAspectJAutoProxy 注解开启 AOP 功能:

@SpringBootApplication
@EnableAspectJAutoProxy
public class DemoApplication {

    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }

}

流程图

flowchart TD
    A[请求到达Controller] --> B{IP验证}
    B -->|验证通过| C[执行方法]
    B -->|验证失败| D[返回错误信息]

序列图

sequenceDiagram
    participant Client
    participant Controller
    participant IPAspect

    Client->>Controller: 发送请求
    Controller->>IPAspect: 请求进入拦截器
    IPAspect->>Controller: 打印IP地址
    Controller->>IPAspect: 执行方法
    IPAspect->>Controller: 打印执行结果
    Controller->>Client: 返回响应

通过以上步骤,我们就可以实现在 Spring Boot 中通过 AOP 拦截 IP 地址。这样可以有效地控制访问权限,增加系统的安全性。希望这篇文章对你有所帮助!