|
- package com.iformall.config;
-
- import com.fasterxml.jackson.annotation.JsonInclude;
- import com.fasterxml.jackson.databind.DeserializationConfig;
- import com.fasterxml.jackson.databind.DeserializationFeature;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import com.fasterxml.jackson.databind.module.SimpleModule;
- import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
- import com.iformall.file.aliyun.AliyunOSS;
- import com.iformall.interceptor.CurrentTenantInterceptor;
- import com.iformall.interceptor.HttpServletRequestWrapperFilter;
- import com.iformall.interceptor.RequestInterceptor;
- import com.iformall.service.MallResourceService;
- import com.iformall.ueditor.ActionEnter;
- import com.iformall.ueditor.ConfigManager;
- import com.iformall.ueditor.UEditorConfig;
- import org.springframework.beans.factory.annotation.Autowired;
- import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
- import org.springframework.boot.context.properties.EnableConfigurationProperties;
- import org.springframework.boot.web.servlet.FilterRegistrationBean;
- import org.springframework.context.annotation.Bean;
- import org.springframework.context.annotation.Configuration;
- import org.springframework.http.converter.HttpMessageConverter;
- import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
- import org.springframework.web.cors.CorsConfiguration;
- import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
- import org.springframework.web.filter.CharacterEncodingFilter;
- import org.springframework.web.filter.CorsFilter;
- import org.springframework.web.servlet.config.annotation.*;
-
- import javax.servlet.Filter;
- import java.math.BigDecimal;
- import java.math.BigInteger;
- import java.text.SimpleDateFormat;
- import java.util.List;
-
- @Configuration
- @EnableWebMvc
- @EnableConfigurationProperties({UEditorConfig.class, AwsProperty.class})
- public class WebConfig implements WebMvcConfigurer {
- @Autowired
- private UEditorConfig uEditorConfig;
-
- @Autowired
- private AwsProperty awsProperty;
-
- @Autowired
- private RequestInterceptor requestInterceptor;
-
- @Autowired
- private CurrentTenantInterceptor tenantInterceptor;
-
- @Autowired
- private MallResourceService mallResourceService;
-
- @Autowired
- private AliyunOSS aliyunOSS;
-
- @Bean
- @ConditionalOnMissingBean(ActionEnter.class)
- public ActionEnter actionEnter() {
- ActionEnter actionEnter = new ActionEnter(ConfigManager.getInstance(uEditorConfig, awsProperty, mallResourceService, aliyunOSS));
- return actionEnter;
- }
-
- @Bean
- public CorsFilter corsFilter() {
- final UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource();
- final CorsConfiguration corsConfiguration = new CorsConfiguration();
- // 允许cookies跨域
- corsConfiguration.setAllowCredentials(true);
- // 允许向该服务器提交请求的URI, *表示全部允许
- corsConfiguration.addAllowedOrigin("*");
- // 允许访问的头信息,*表示全部
- corsConfiguration.addAllowedHeader("*");
- // 允许提交请求的方法, *表示全部允许
- corsConfiguration.addAllowedMethod("*");
- urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration);
- return new CorsFilter(urlBasedCorsConfigurationSource);
- }
-
- /**
- * 用于处理编码问题
- *
- * @return
- */
- @Bean("myCharacterEncodingFilter")
- public Filter characterEncodingFilter() {
- CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
- characterEncodingFilter.setEncoding("UTF-8");
- characterEncodingFilter.setForceEncoding(true);
- return characterEncodingFilter;
- }
-
- @Override
- public void addInterceptors(InterceptorRegistry registry) {
- registry.addInterceptor(requestInterceptor).addPathPatterns("/**");
- registry.addInterceptor(tenantInterceptor).addPathPatterns("/**");
- }
-
- @Override
- public void addResourceHandlers(ResourceHandlerRegistry registry) {
- // registry.addResourceHandler("swagger-ui.html")
- // .addResourceLocations("classpath:/META-INF/resources/");
- registry.addResourceHandler("doc.html")
- .addResourceLocations("classpath:/META-INF/resources/");
- registry.addResourceHandler("/webjars/**")
- .addResourceLocations("classpath:/META-INF/resources/webjars/");
- // ueditor
- registry.addResourceHandler("/upload/**")
- .addResourceLocations("file:" + uEditorConfig.getUploadPath());
- registry.addResourceHandler("/config.json").addResourceLocations("classpath:/config.json");
-
- }
-
- @Override
- public void addCorsMappings(CorsRegistry registry) {
- registry.addMapping("/**")
- .allowedOrigins("*")
- .allowCredentials(true)
- .allowedMethods("GET", "POST", "DELETE", "PUT")
- .maxAge(3600);
- }
-
- @Override
- public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
- MappingJackson2HttpMessageConverter jackson2HttpMessageConverter = new MappingJackson2HttpMessageConverter();
- //ObjectMapper 是Jackson库的主要类。它提供一些功能将转换成Java对象匹配JSON结构,反之亦然
- ObjectMapper objectMapper = new ObjectMapper();
- SimpleModule simpleModule = new SimpleModule();
-
- //不显示为null的字段
- objectMapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
-
- DeserializationConfig dc = objectMapper.getDeserializationConfig();
- // 设置反序列化日期格式、忽略不存在get、set的属性
- objectMapper.setConfig(
- dc.with(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"))
- .without(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
- );
-
- //序列化将Long转String类型
- simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
- simpleModule.addSerializer(Long.TYPE, ToStringSerializer.instance);
- SimpleModule bigIntegerModule = new SimpleModule();
- //序列化将BigInteger转String类型
- bigIntegerModule.addSerializer(BigInteger.class, ToStringSerializer.instance);
- SimpleModule bigDecimalModule = new SimpleModule();
- //序列化将BigDecimal转String类型
- bigDecimalModule.addSerializer(BigDecimal.class, ToStringSerializer.instance);
- objectMapper.registerModule(simpleModule);
- objectMapper.registerModule(bigDecimalModule);
- objectMapper.registerModule(bigIntegerModule);
- jackson2HttpMessageConverter.setObjectMapper(objectMapper);
- converters.add(jackson2HttpMessageConverter);
- }
-
- @Bean
- public FilterRegistrationBean<HttpServletRequestWrapperFilter> Filters() {
- FilterRegistrationBean<HttpServletRequestWrapperFilter> registrationBean = new FilterRegistrationBean<HttpServletRequestWrapperFilter>();
- registrationBean.setFilter(new HttpServletRequestWrapperFilter());
- registrationBean.addUrlPatterns("/*");
- registrationBean.setName("koalaSignFilter");
- return registrationBean;
- }
- }
|