MvcConfig.java 6.3 KB

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