WebConfig.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. package net.mingsoft.config;
  2. import java.io.File;
  3. import java.sql.SQLException;
  4. import java.util.List;
  5. import java.util.concurrent.*;
  6. import java.util.regex.Matcher;
  7. import java.util.regex.Pattern;
  8. import com.baomidou.mybatisplus.annotation.DbType;
  9. import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
  10. import com.baomidou.mybatisplus.extension.toolkit.JdbcUtils;
  11. import net.mingsoft.interceptor.DMInnerInterceptor;
  12. import net.mingsoft.interceptor.MysqlInnerInterceptor;
  13. import org.springframework.aop.Advisor;
  14. import net.mingsoft.basic.filter.XSSEscapeFilter;
  15. import org.springframework.aop.support.DefaultPointcutAdvisor;
  16. import org.springframework.aop.support.JdkRegexpMethodPointcut;
  17. import org.springframework.beans.factory.annotation.Value;
  18. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  19. import org.springframework.boot.web.servlet.ServletListenerRegistrationBean;
  20. import org.springframework.boot.web.servlet.ServletRegistrationBean;
  21. import org.springframework.context.annotation.Bean;
  22. import org.springframework.context.annotation.Configuration;
  23. import org.springframework.core.Ordered;
  24. import org.springframework.http.converter.HttpMessageConverter;
  25. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
  26. import org.springframework.web.context.request.RequestContextListener;
  27. import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
  28. import org.springframework.web.servlet.config.annotation.PathMatchConfigurer;
  29. import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
  30. import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
  31. import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
  32. import com.alibaba.druid.pool.DruidDataSource;
  33. import com.alibaba.druid.support.http.StatViewServlet;
  34. import com.alibaba.druid.support.http.WebStatFilter;
  35. import com.alibaba.druid.support.spring.stat.BeanTypeAutoProxyCreator;
  36. import com.alibaba.druid.support.spring.stat.DruidStatInterceptor;
  37. import com.fasterxml.jackson.databind.DeserializationFeature;
  38. import com.fasterxml.jackson.databind.ObjectMapper;
  39. import net.mingsoft.basic.interceptor.ActionInterceptor;
  40. import net.mingsoft.basic.util.BasicUtil;
  41. import javax.sql.DataSource;
  42. @Configuration
  43. public class WebConfig implements WebMvcConfigurer {
  44. /**
  45. * 上传路径
  46. */
  47. @Value("${ms.upload.path}")
  48. private String uploadFloderPath;
  49. @Value("${ms.upload.template}")
  50. private String template;
  51. /**
  52. * 上传路径映射
  53. */
  54. @Value("${ms.upload.mapping}")
  55. private String uploadMapping;
  56. @Bean
  57. public ActionInterceptor actionInterceptor() {
  58. return new ActionInterceptor();
  59. }
  60. @Bean
  61. public MybatisPlusInterceptor mybatisPlusInterceptor(DataSource dataSource) {
  62. MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
  63. try {
  64. //mysql 添加转换sql
  65. DbType dbType = JdbcUtils.getDbType(dataSource.getConnection().getMetaData().getURL());
  66. if(DbType.MYSQL==dbType){
  67. interceptor.addInnerInterceptor(new MysqlInnerInterceptor());
  68. }else if(DbType.DM==dbType){
  69. interceptor.addInnerInterceptor( new DMInnerInterceptor());
  70. }
  71. } catch (SQLException e) {
  72. e.printStackTrace();
  73. }
  74. return interceptor;
  75. }
  76. /**
  77. * 增加对rest api鉴权的spring mvc拦截器
  78. */
  79. @Override
  80. public void addInterceptors(InterceptorRegistry registry) {
  81. // 排除配置
  82. registry.addInterceptor(actionInterceptor()).excludePathPatterns("/static/**", "/app/**", "/webjars/**",
  83. "/*.html", "/*.htm");
  84. }
  85. @Override
  86. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  87. registry.addResourceHandler(uploadMapping).addResourceLocations(File.separator+uploadFloderPath+File.separator,"file:"+uploadFloderPath+File.separator);
  88. registry.addResourceHandler("/templets/**").addResourceLocations(File.separator+template+File.separator,"file:"+template+File.separator);
  89. registry.addResourceHandler("/html/**").addResourceLocations("/html/","file:html/");
  90. //三种映射方式 webapp下、当前目录下、jar内
  91. registry.addResourceHandler("/app/**").addResourceLocations("/app/","file:app/", "classpath:/app/");
  92. registry.addResourceHandler("/static/**").addResourceLocations("/static/","file:static/","classpath:/static/","classpath:/META-INF/resources/");
  93. registry.addResourceHandler("/api/**").addResourceLocations("/api/","file:api/", "classpath:/api/");
  94. if(new File(uploadFloderPath).isAbsolute()){
  95. //如果指定了绝对路径,上传的文件都映射到uploadMapping下
  96. registry.addResourceHandler(uploadMapping).addResourceLocations("file:"+uploadFloderPath+ File.separator
  97. //映射其他路径文件
  98. //,file:F://images
  99. );
  100. }
  101. }
  102. /**
  103. * druid数据库连接池监控
  104. */
  105. @Bean
  106. public BeanTypeAutoProxyCreator beanTypeAutoProxyCreator() {
  107. BeanTypeAutoProxyCreator beanTypeAutoProxyCreator = new BeanTypeAutoProxyCreator();
  108. beanTypeAutoProxyCreator.setTargetBeanType(DruidDataSource.class);
  109. beanTypeAutoProxyCreator.setInterceptorNames("druidStatInterceptor");
  110. return beanTypeAutoProxyCreator;
  111. }
  112. //XSS过滤器
  113. @Bean
  114. public FilterRegistrationBean xssFilterRegistration() {
  115. XSSEscapeFilter xssFilter = new XSSEscapeFilter();
  116. FilterRegistrationBean registration = new FilterRegistrationBean(xssFilter);
  117. xssFilter.includes.add(".*/search.do");
  118. registration.setName("XSSFilter");
  119. registration.addUrlPatterns("/*");
  120. registration.setOrder(Ordered.HIGHEST_PRECEDENCE);
  121. return registration;
  122. }
  123. /**
  124. * RequestContextListener注册
  125. */
  126. @Bean
  127. public ServletListenerRegistrationBean<RequestContextListener> requestContextListenerRegistration() {
  128. return new ServletListenerRegistrationBean<>(new RequestContextListener());
  129. }
  130. /**
  131. * 设置默认首页
  132. */
  133. @Override
  134. public void addViewControllers(ViewControllerRegistry registry) {
  135. registry.addViewController("/").setViewName("forward:/index");
  136. registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
  137. WebMvcConfigurer.super.addViewControllers(registry);
  138. }
  139. /**
  140. * 解决com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException 问题,提交实体不存在的字段异常
  141. */
  142. @Override
  143. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  144. // TODO Auto-generated method stub
  145. converters.add(mappingJackson2HttpMessageConverter());
  146. WebMvcConfigurer.super.configureMessageConverters(converters);
  147. }
  148. @Bean
  149. public MappingJackson2HttpMessageConverter mappingJackson2HttpMessageConverter(){
  150. MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();
  151. ObjectMapper objectMapper = new ObjectMapper();
  152. //添加此配置
  153. objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
  154. converter.setObjectMapper(objectMapper);
  155. return converter;
  156. }
  157. @Bean
  158. public ExecutorService crawlExecutorPool() {
  159. // 创建线程池
  160. ExecutorService pool =
  161. new ThreadPoolExecutor(20, 20,
  162. 0L, TimeUnit.MILLISECONDS,
  163. new LinkedBlockingQueue<Runnable>());
  164. return pool;
  165. }
  166. }