springboot aop统一限制文件类型和大小
时间: 2023-07-03 17:30:31 浏览: 151
SpringBoot限制文件或图片上传大小的两种配置方法
在 Spring Boot 中,你也可以使用 AOP 统一限制上传文件的类型和大小。使用 AOP 可以更加灵活地控制切面,使得你可以在更多的场景下使用。
首先,你需要创建一个切面类,并使用 @Aspect 注解标注。在切面类中,你可以使用 @Around 注解来实现文件上传的校验。以下是一个简单的例子:
```
@Aspect
@Component
public class FileUploadAspect {
private static final long MAX_FILE_SIZE = 10 * 1024 * 1024; // 10MB
private static final List<String> ALLOWED_CONTENT_TYPES = Arrays.asList("image/jpeg", "image/png");
@Around("execution(* com.example.demo.controller.UploadController.uploadFile(..))")
public Object checkFile(ProceedingJoinPoint joinPoint) throws Throwable {
Object[] args = joinPoint.getArgs();
for (Object arg : args) {
if (arg instanceof MultipartFile) {
MultipartFile file = (MultipartFile) arg;
// 检查文件大小
if (file.getSize() > MAX_FILE_SIZE) {
throw new IllegalArgumentException("File size too large");
}
// 检查文件类型
String contentType = file.getContentType();
if (!ALLOWED_CONTENT_TYPES.contains(contentType)) {
throw new IllegalArgumentException("File type not allowed");
}
}
}
return joinPoint.proceed();
}
}
```
在上面的代码中,我们首先创建了一个切面类,并使用 @Aspect 和 @Component 注解标注。然后,我们使用 @Around 注解来标注一个切点,这个切点会匹配 UploadController 类中的 uploadFile 方法。在这个切面中,我们检查方法参数中是否有 MultipartFile 类型的参数,并对上传的文件进行校验。如果上传的文件不符合要求,我们就抛出一个 IllegalArgumentException 异常。否则,就调用目标方法继续处理请求。
接下来,你需要在 Spring Boot 应用程序中注册这个切面。你可以创建一个配置类,并使用 @EnableAspectJAutoProxy 注解启用 AOP 功能。以下是一个简单的例子:
```
@Configuration
@EnableAspectJAutoProxy
public class AppConfig {
}
```
在上面的代码中,我们首先创建了一个配置类,并使用 @EnableAspectJAutoProxy 注解启用 AOP 功能。这样,我们就可以使用刚才创建的切面类来拦截上传文件的请求,进行统一的校验。
阅读全文