返回

前端学Java04-SpringBoot实战:静态资源+拦截器+前后端文件上传

前端

SpringBoot 项目中静态资源、权限控制和文件上传的全面指南

配置静态资源

SpringBoot 提供了一种便捷的方法来管理静态资源,如 CSS、JavaScript 和图像。要配置它们,需要在 WebMvcConfigurer 接口中重写 addResourceHandlers 方法。这允许您指定静态资源的路径和实际文件所在的位置。例如,以下代码将所有 /static/** 路径的请求映射到 /static/ 目录中的文件:

@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
    registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
}

使用拦截器进行权限控制

拦截器是一个用于在请求被处理之前或之后执行逻辑的组件。在 SpringBoot 中,可以使用拦截器来实施权限控制。为此,创建一个实现 HandlerInterceptor 接口的类。该接口的 preHandle 方法可以在请求处理之前执行逻辑,例如检查用户是否已登录。如果用户未登录,则重定向到登录页面。例如,以下代码创建了一个拦截器,检查用户是否已登录:

@Component
public class MyInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
        if (request.getSession().getAttribute("user") == null) {
            response.sendRedirect("/login");
            return false;
        }
        return true;
    }
}

要使用该拦截器,请在 WebMvcConfig 类中注册它:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new MyInterceptor()).addPathPatterns("/**");
    }
}

实现前后端文件上传

SpringBoot 提供了对文件上传的支持。为了实现前后端文件上传,需要进行两个步骤:

  1. 前端代码: 前端使用 FormData API 构建一个包含文件的数据对象。然后使用 POST 请求将数据对象发送到服务器。
  2. 后端代码: 在后端,使用 @RequestParam("file") MultipartFile file 注解来处理上传的文件。使用 transferTo 方法将文件保存到服务器。例如,以下代码处理上传的文件:
@PostMapping("/upload")
public ResponseEntity<String> uploadFile(@RequestParam("file") MultipartFile file) {
    String filePath = "/path/to/file";
    file.transferTo(new File(filePath));
    return ResponseEntity.ok("文件上传成功");
}

常见问题解答

  1. 如何自定义静态资源的缓存策略?
    可以使用 addResourceHandlers 方法中的 setCachePeriod 方法自定义缓存策略。
  2. 拦截器可以应用于哪些类型的请求?
    拦截器可以应用于任何类型的请求,包括 GET、POST、PUT 和 DELETE。
  3. 我可以有多个拦截器吗?
    是的,可以有多个拦截器。它们将按注册顺序执行。
  4. 文件上传失败时如何处理错误?
    可以使用 MultipartFile 对象的 getSize()isEmpty() 方法检查文件是否为空或超出最大大小。
  5. 如何使用 Swagger UI 测试文件上传功能?
    Swagger UI 提供了一个文件上传表单,可以使用它来测试文件上传功能。

结论

通过遵循本文中概述的步骤,您将能够有效地在 SpringBoot 项目中管理静态资源、实施权限控制并实现前后端文件上传。这些技术对于构建健壮且用户友好的 web 应用程序至关重要。