package com.ydtech.config; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.extension.plugins.handler.TableNameHandler; import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; import com.ydtech.aop.DynamicNameAspect; import com.ydtech.aop.DynamicTableNameHandler; import com.ydtech.aop.RequestStringParamHandlerMethodArgumentResolver; import com.ydtech.components.CorsInterceptor; import com.ydtech.components.TokenInterceptor; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.http.converter.HttpMessageConverter; import org.springframework.http.converter.StringHttpMessageConverter; import org.springframework.web.method.support.HandlerMethodArgumentResolver; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.annotation.Resource; import java.nio.charset.StandardCharsets; import java.util.List; @Configuration public class MvcConfig implements WebMvcConfigurer { @Value("${apk.path}") private String apkPath; @Value("${upload.file.path}") private String uploadFilePath; @Value("${upload.file.url}") private String uploadFileUrl; @Resource private CorsInterceptor corsInterceptor; @Resource private TokenInterceptor tokenInterceptor; @Bean public HttpMessageConverter responseBody() { return new StringHttpMessageConverter(StandardCharsets.UTF_8); } @Override public void configureMessageConverters(List> converters) { converters.add(responseBody()); } // @Override // public void addCorsMappings(CorsRegistry registry) { // registry.addMapping("/**") // 允许跨域访问的路径 // .allowedOriginPatterns("*") //// .allowedOrigins("*") // 允许跨域访问的源 // .allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE") // 允许请求方法 // .maxAge(168000) // 预检间隔时间 // .allowedHeaders("*") // 允许头部设置 // .allowCredentials(false); // 是否发送cookie // } // @Override // public void addCorsMappings(CorsRegistry registry) { // registry.addMapping("/**") // .allowedOriginPatterns("*") //// .allowedOrigins("*") //// .allowedMethods("*") // .allowedMethods("GET", "HEAD", "POST", "PUT", "DELETE", "OPTIONS") // .allowCredentials(true) // .maxAge(3600) // .allowedHeaders("*") // //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息) // .exposedHeaders("Authorization", "content-type"); // // ; // } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/"); registry.addResourceHandler("/template/**").addResourceLocations("classpath:/template/"); registry.addResourceHandler("doc.html").addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/app/android/**").addResourceLocations("file:" + apkPath); // 上传文件后路劲映射 registry.addResourceHandler(uploadFileUrl + "**").addResourceLocations("file:" + uploadFilePath); } @Bean public PaginationInnerInterceptor paginationInnerInterceptor() { PaginationInnerInterceptor paginationInterceptor = new PaginationInnerInterceptor(); // 设置最大单页限制数量,默认 500 条,-1 不受限制 paginationInterceptor.setMaxLimit(-1L); paginationInterceptor.setDbType(DbType.MYSQL); // 开启 count 的 join 优化,只针对部分 left join paginationInterceptor.setOptimizeJoin(true); return paginationInterceptor; } @Bean public DynamicNameAspect dynamicNameAspect() { return new DynamicNameAspect(); } @Bean public TableNameHandler dynamicTableNameHandler() { return new DynamicTableNameHandler(); } /** * 获取单个参数 * * @param argumentResolvers 处理程序方法参数解析器 */ @Override public void addArgumentResolvers(List argumentResolvers) { argumentResolvers.add(new RequestStringParamHandlerMethodArgumentResolver()); WebMvcConfigurer.super.addArgumentResolvers(argumentResolvers); } // 注册拦截器 @Override public void addInterceptors(InterceptorRegistry registry) { // 跨域拦截器需放在最上面 registry.addInterceptor(corsInterceptor).addPathPatterns("/**"); //token拦截器 registry.addInterceptor(tokenInterceptor.tokenInterceptor()).addPathPatterns("/**"); } }