WebMvcHandler.java 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package com.ema.admin.handler;
  2. import cn.dev33.satoken.interceptor.SaInterceptor;
  3. import cn.dev33.satoken.router.SaRouter;
  4. import cn.dev33.satoken.stp.StpUtil;
  5. import cn.hutool.core.collection.CollUtil;
  6. import org.dromara.x.file.storage.spring.SpringFileStorageProperties;
  7. import org.springframework.context.annotation.Configuration;
  8. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  9. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  10. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  11. import javax.annotation.Resource;
  12. import java.util.List;
  13. /**
  14. * WebMvc 是配置静态资源访问、拦截器、权限验证处理器
  15. */
  16. @Configuration
  17. public class WebMvcHandler implements WebMvcConfigurer {
  18. @Resource
  19. private SpringFileStorageProperties springFileStorageProperties;
  20. @Override
  21. public void addInterceptors(InterceptorRegistry registry) {
  22. // 注册 Sa-Token 拦截器,定义详细认证规则 https://sa-token.cc/doc.html
  23. registry.addInterceptor(new SaInterceptor(handler -> {
  24. // 指定一条 match 规则
  25. SaRouter.match("/**") // 拦截的 path 列表,可以写多个
  26. .notMatch("*.html", "*.css", "*.js", "/swagger**/**", "/webjars/**", "/v3/**", "/doc.html", "/csrf", "/error")
  27. .notMatch("/queue.html", "/queue/**") // 排除队列监控页面
  28. .notMatch("/static/**") // 排除掉静态资源
  29. .notMatch("/login", "/logout", "/register", "/sendEmailCode", "/imgCode/**") // 排除登录、注册、发送邮件验证码接口
  30. .notMatch("/ws/**") // 排除 WebSocket 接口
  31. .notMatch( "/marketing/callback/**") // 排除极光回调接口
  32. .notMatch("/api/websocket/**") // 排除 WebSocket API 文档接口
  33. .notMatch("/v2/api-docs", "/swagger-resources/**", "/swagger-ui.html") // 排除 Knife4j 接口
  34. .check(r -> StpUtil.isLogin()); // 要执行的校验动作,可以写完整的 lambda 表达式
  35. })).addPathPatterns("/**");
  36. }
  37. @Override
  38. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  39. // 配置文件存储本地上传资源访问
  40. configureFileStorageResourceHandlers(registry);
  41. // 配置其他静态资源访问
  42. registry.addResourceHandler("/ema/**").addResourceLocations("classpath:/web/");
  43. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
  44. registry.addResourceHandler("/queue.html", "/redismq/**").addResourceLocations("classpath:/redismq/");
  45. }
  46. /**
  47. * 配置文件存储资源处理器
  48. */
  49. private void configureFileStorageResourceHandlers(ResourceHandlerRegistry registry) {
  50. List<? extends SpringFileStorageProperties.SpringLocalPlusConfig> localPlusList =
  51. springFileStorageProperties.getLocalPlus();
  52. if (CollUtil.isEmpty(localPlusList)) {
  53. return;
  54. }
  55. // 只遍历一次启用存储的配置
  56. for (SpringFileStorageProperties.SpringLocalPlusConfig config : localPlusList) {
  57. if (config.getEnableStorage()) {
  58. registry.addResourceHandler(config.getPathPatterns())
  59. .addResourceLocations("file:/");
  60. }
  61. }
  62. }
  63. }