MvcConfig.java 5.9 KB

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