后台服务
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

167 line
7.1 KiB

  1. package com.iformall.config;
  2. import com.fasterxml.jackson.annotation.JsonInclude;
  3. import com.fasterxml.jackson.databind.DeserializationConfig;
  4. import com.fasterxml.jackson.databind.DeserializationFeature;
  5. import com.fasterxml.jackson.databind.ObjectMapper;
  6. import com.fasterxml.jackson.databind.module.SimpleModule;
  7. import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
  8. import com.iformall.file.aliyun.AliyunOSS;
  9. import com.iformall.interceptor.CurrentTenantInterceptor;
  10. import com.iformall.interceptor.HttpServletRequestWrapperFilter;
  11. import com.iformall.interceptor.RequestInterceptor;
  12. import com.iformall.service.MallResourceService;
  13. import com.iformall.ueditor.ActionEnter;
  14. import com.iformall.ueditor.ConfigManager;
  15. import com.iformall.ueditor.UEditorConfig;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
  18. import org.springframework.boot.context.properties.EnableConfigurationProperties;
  19. import org.springframework.boot.web.servlet.FilterRegistrationBean;
  20. import org.springframework.context.annotation.Bean;
  21. import org.springframework.context.annotation.Configuration;
  22. import org.springframework.http.converter.HttpMessageConverter;
  23. import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
  24. import org.springframework.web.cors.CorsConfiguration;
  25. import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
  26. import org.springframework.web.filter.CharacterEncodingFilter;
  27. import org.springframework.web.filter.CorsFilter;
  28. import org.springframework.web.servlet.config.annotation.*;
  29. import javax.servlet.Filter;
  30. import java.math.BigDecimal;
  31. import java.math.BigInteger;
  32. import java.text.SimpleDateFormat;
  33. import java.util.List;
  34. @Configuration
  35. @EnableWebMvc
  36. @EnableConfigurationProperties({UEditorConfig.class, AwsProperty.class})
  37. public class WebConfig implements WebMvcConfigurer {
  38. @Autowired
  39. private UEditorConfig uEditorConfig;
  40. @Autowired
  41. private AwsProperty awsProperty;
  42. @Autowired
  43. private RequestInterceptor requestInterceptor;
  44. @Autowired
  45. private CurrentTenantInterceptor tenantInterceptor;
  46. @Autowired
  47. private MallResourceService mallResourceService;
  48. @Autowired
  49. private AliyunOSS aliyunOSS;
  50. @Bean
  51. @ConditionalOnMissingBean(ActionEnter.class)
  52. public ActionEnter actionEnter() {
  53. ActionEnter actionEnter = new ActionEnter(ConfigManager.getInstance(uEditorConfig, awsProperty, mallResourceService, aliyunOSS));
  54. return actionEnter;
  55. }
  56. @Bean
  57. public CorsFilter corsFilter() {
  58. final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
  59. final CorsConfiguration corsConfiguration = new CorsConfiguration();
  60. // 允许cookies跨域
  61. corsConfiguration.setAllowCredentials(true);
  62. // 允许向该服务器提交请求的URI, *表示全部允许
  63. corsConfiguration.addAllowedOrigin("*");
  64. // 允许访问的头信息,*表示全部
  65. corsConfiguration.addAllowedHeader("*");
  66. // 允许提交请求的方法, *表示全部允许
  67. corsConfiguration.addAllowedMethod("*");
  68. urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
  69. return new CorsFilter(urlBasedCorsConfigurationSource);
  70. }
  71. /**
  72. * 用于处理编码问题
  73. *
  74. * @return
  75. */
  76. @Bean("myCharacterEncodingFilter")
  77. public Filter characterEncodingFilter() {
  78. CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
  79. characterEncodingFilter.setEncoding("UTF-8");
  80. characterEncodingFilter.setForceEncoding(true);
  81. return characterEncodingFilter;
  82. }
  83. @Override
  84. public void addInterceptors(InterceptorRegistry registry) {
  85. registry.addInterceptor(requestInterceptor).addPathPatterns("/**");
  86. registry.addInterceptor(tenantInterceptor).addPathPatterns("/**");
  87. }
  88. @Override
  89. public void addResourceHandlers(ResourceHandlerRegistry registry) {
  90. // registry.addResourceHandler("swagger-ui.html")
  91. // .addResourceLocations("classpath:/META-INF/resources/");
  92. registry.addResourceHandler("doc.html")
  93. .addResourceLocations("classpath:/META-INF/resources/");
  94. registry.addResourceHandler("/webjars/**")
  95. .addResourceLocations("classpath:/META-INF/resources/webjars/");
  96. // ueditor
  97. registry.addResourceHandler("/upload/**")
  98. .addResourceLocations("file:" + uEditorConfig.getUploadPath());
  99. registry.addResourceHandler("/config.json").addResourceLocations("classpath:/config.json");
  100. }
  101. @Override
  102. public void addCorsMappings(CorsRegistry registry) {
  103. registry.addMapping("/**")
  104. .allowedOrigins("*")
  105. .allowCredentials(true)
  106. .allowedMethods("GET", "POST", "DELETE", "PUT")
  107. .maxAge(3600);
  108. }
  109. @Override
  110. public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
  111. MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
  112. //ObjectMapper 是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然
  113. ObjectMapper objectMapper = new ObjectMapper();
  114. SimpleModule simpleModule = new SimpleModule();
  115. //不显示为null的字段
  116. objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
  117. DeserializationConfig dc = objectMapper.getDeserializationConfig();
  118. // 设置反序列化日期格式、忽略不存在get、set的属性
  119. objectMapper.setConfig(
  120. dc.with(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))
  121. .without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
  122. );
  123. //序列化将Long转String类型
  124. simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
  125. simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
  126. SimpleModule bigIntegerModule = new SimpleModule();
  127. //序列化将BigInteger转String类型
  128. bigIntegerModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
  129. SimpleModule bigDecimalModule = new SimpleModule();
  130. //序列化将BigDecimal转String类型
  131. bigDecimalModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);
  132. objectMapper.registerModule(simpleModule);
  133. objectMapper.registerModule(bigDecimalModule);
  134. objectMapper.registerModule(bigIntegerModule);
  135. jackson2HttpMessageConverter.setObjectMapper(objectMapper);
  136. converters.add(jackson2HttpMessageConverter);
  137. }
  138. @Bean
  139. public FilterRegistrationBean<HttpServletRequestWrapperFilter> Filters() {
  140. FilterRegistrationBean<HttpServletRequestWrapperFilter> registrationBean = new FilterRegistrationBean<HttpServletRequestWrapperFilter>();
  141. registrationBean.setFilter(new HttpServletRequestWrapperFilter());
  142. registrationBean.addUrlPatterns("/*");
  143. registrationBean.setName("koalaSignFilter");
  144. return registrationBean;
  145. }
  146. }