MvcConfig.java 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. package com.ydtech.config;
  2. import com.baomidou.mybatisplus.annotation.DbType;
  3. import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler;
  4. import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
  5. import com.ydtech.aop.DynamicNameAspect;
  6. import com.ydtech.aop.DynamicTableNameHandler;
  7. import com.ydtech.aop.RequestStringParamHandlerMethodArgumentResolver;
  8. import com.ydtech.components.CorsInterceptor;
  9. import com.ydtech.components.TokenInterceptor;
  10. import org.springframework.beans.factory.annotation.Value;
  11. import org.springframework.context.annotation.Bean;
  12. import org.springframework.context.annotation.Configuration;
  13. import org.springframework.http.converter.HttpMessageConverter;
  14. import org.springframework.http.converter.StringHttpMessageConverter;
  15. import org.springframework.web.method.support.HandlerMethodArgumentResolver;
  16. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  17. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  18. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  19. import javax.annotation.Resource;
  20. import java.nio.charset.StandardCharsets;
  21. import java.util.List;
  22. @Configuration
  23. public class MvcConfig implements WebMvcConfigurer {
  24. @Value("${apk.path}")
  25. private String apkPath;
  26. @Value("${upload.file.path}")
  27. private String uploadFilePath;
  28. @Value("${upload.file.url}")
  29. private String uploadFileUrl;
  30. @Resource
  31. private CorsInterceptor corsInterceptor;
  32. @Resource
  33. private TokenInterceptor tokenInterceptor;
  34. @Bean
  35. public HttpMessageConverter<String> responseBody() {
  36. return new StringHttpMessageConverter(StandardCharsets.UTF_8);
  37. }
  38. @Override
  39. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  40. converters.add(responseBody());
  41. }
  42. // @Override
  43. // public void addCorsMappings(CorsRegistry registry) {
  44. // registry.addMapping("/**") // 允许跨域访问的路径
  45. // .allowedOriginPatterns("*")
  46. //// .allowedOrigins("*") // 允许跨域访问的源
  47. // .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法
  48. // .maxAge(168000) // 预检间隔时间
  49. // .allowedHeaders("*") // 允许头部设置
  50. // .allowCredentials(false); // 是否发送cookie
  51. // }
  52. // @Override
  53. // public void addCorsMappings(CorsRegistry registry) {
  54. // registry.addMapping("/**")
  55. // .allowedOriginPatterns("*")
  56. //// .allowedOrigins("*")
  57. //// .allowedMethods("*")
  58. // .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS")
  59. // .allowCredentials(true)
  60. // .maxAge(3600)
  61. // .allowedHeaders("*")
  62. // //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
  63. // .exposedHeaders("Authorization", "content-type");
  64. //
  65. // ;
  66. // }
  67. @Override
  68. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  69. registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
  70. registry.addResourceHandler("/template/**").addResourceLocations("classpath:/template/");
  71. registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/");
  72. registry.addResourceHandler("/app/android/**").addResourceLocations("file:" + apkPath);
  73. // 上传文件后路劲映射
  74. registry.addResourceHandler(uploadFileUrl + "**").addResourceLocations("file:" + uploadFilePath);
  75. }
  76. @Bean
  77. public PaginationInnerInterceptor paginationInnerInterceptor() {
  78. PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor();
  79. // 设置最大单页限制数量,默认 500 条,-1 不受限制
  80. paginationInterceptor.setMaxLimit(-1L);
  81. paginationInterceptor.setDbType(DbType.MYSQL);
  82. // 开启 count 的 join 优化,只针对部分 left join
  83. paginationInterceptor.setOptimizeJoin(true);
  84. return paginationInterceptor;
  85. }
  86. @Bean
  87. public DynamicNameAspect dynamicNameAspect() {
  88. return new DynamicNameAspect();
  89. }
  90. @Bean
  91. public TableNameHandler dynamicTableNameHandler() {
  92. return new DynamicTableNameHandler();
  93. }
  94. /**
  95. * 获取单个参数
  96. *
  97. * @param argumentResolvers 处理程序方法参数解析器
  98. */
  99. @Override
  100. public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {
  101. argumentResolvers.add(new RequestStringParamHandlerMethodArgumentResolver());
  102. WebMvcConfigurer.super.addArgumentResolvers(argumentResolvers);
  103. }
  104. // 注册拦截器
  105. @Override
  106. public void addInterceptors(InterceptorRegistry registry) {
  107. // 跨域拦截器需放在最上面
  108. registry.addInterceptor(corsInterceptor).addPathPatterns("/**");
  109. //token拦截器
  110. registry.addInterceptor(tokenInterceptor.tokenInterceptor()).addPathPatterns("/**");
  111. }
  112. }