在springboot的aop中获取请求的ip
时间: 2024-09-28 15:05:40 浏览: 93
基于SpringBoot框架的maven依赖包,能够对特定方法、特定IP的请求进行限制与拦截
在Spring Boot应用中使用AOP (Aspect Oriented Programming) 获取HTTP请求的IP地址,你可以通过创建一个切面(Aspect),并在其中定义一个通知(Advice)来拦截并处理请求。以下是一个简单的示例:
首先,你需要添加`@Around`注解来创建一个环绕通知,这个通知将在每次HTTP请求之前执行。这里我们使用`HttpServletRequest`对象来获取客户端IP:
```java
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class RequestIpAspect {
@Around("execution(* com.example.yourpackage.*.controller.*(..))") // 替换为你实际的控制器包路径
public Object getIpAndProceed(ProceedingJoinPoint joinPoint) throws Throwable {
HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest();
String ipAddress = request.getRemoteAddr(); // 获取IP地址
System.out.println("Client IP address: " + ipAddress);
// 调用目标方法并返回结果
return joinPoint.proceed();
}
}
```
在这个例子中,`execution(* com.example.yourpackage.*.controller.*(..))`是一个切入点表达式,它匹配所有在指定包及其子包下的控制器类的方法。
当你启动Spring Boot应用,这个切面将自动生效,每当我们访问一个受此切面影响的控制器方法时,就会打印出客户端的IP地址。
阅读全文