WebConfig.java 5.7 KB

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