//package cn.superdesk.uniorder.config.security;
//
//import cn.superdesk.uniorder.utils.converter.DateConverter;
//import com.alibaba.fastjson.serializer.SerializerFeature;
//import com.alibaba.fastjson.support.config.FastJsonConfig;
//import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
//import org.springframework.context.annotation.Bean;
//import org.springframework.context.annotation.Configuration;
//import org.springframework.context.support.ConversionServiceFactoryBean;
//import org.springframework.core.convert.ConversionService;
//import org.springframework.core.convert.converter.Converter;
//import org.springframework.http.MediaType;
//import org.springframework.http.converter.HttpMessageConverter;
//import org.springframework.web.cors.CorsConfiguration;
//import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
//import org.springframework.web.filter.CorsFilter;
//import org.springframework.web.servlet.ViewResolver;
//import org.springframework.web.servlet.config.annotation.*;
//import org.springframework.web.servlet.view.InternalResourceViewResolver;
//
//import java.util.ArrayList;
//import java.util.HashSet;
//import java.util.List;
//import java.util.Set;
//
//
//@EnableWebMvc
//@Configuration
//public class SpringMvcConfig extends WebMvcConfigurerAdapter {
//
//	/**
//	 * 将拦截器作为bean写入配置中
//	 *
//	 * @return
//	 */
//	@Bean
//	public JwtInterceptor myInterceptor() {
//		return new JwtInterceptor();
//	}
//
//	@Bean
//	public ViewResolver getViewResolver() {
//
//		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
//
//		resolver.setPrefix("/WEB-INF/views/");
//		resolver.setSuffix(".jsp");// 可以不用设置默认是这个视图解析器
//		resolver.setViewClass(org.springframework.web.servlet.view.JstlView.class);
//
//		return resolver;
//	}
//
//	/**
//	 * 跨域过滤器
//	 *
//	 * @return
//	 */
//	@Bean
//	public CorsFilter corsFilter() {
//
//		UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
//		source.registerCorsConfiguration("/**", buildConfig());
//
//		return new CorsFilter(source);
//	}
//
//	private CorsConfiguration buildConfig() {
//
//		CorsConfiguration corsConfiguration = new CorsConfiguration();
//
//		corsConfiguration.addAllowedOrigin("*");
//		corsConfiguration.addAllowedHeader("*");
//		corsConfiguration.addAllowedMethod("*");
//
//		return corsConfiguration;
//	}
//
//	/**
//	 * 该方法用于注册拦截器 可注册多个拦截器,多个拦截器组成一个拦截器链
//	 *
//	 * @param registry
//	 */
//	@Override
//	public void addInterceptors(InterceptorRegistry registry) {
//
//		// 添加拦截器
//		String[] arrIgnoreUrl = {
//				"/user/login",
//				"/user/tokenlogin",
//				"/user/refreshToken",
//				"/error",
//				"/user/loginByToken",
//				"/dubbo/index",
//				"/external/useMaterial",
//				"/pai/**",
//				"/dzmain/test",
//				"/unifiedorder/*",
//				"/_wechat/*",
//				"/fundUser/selectById"
//		};
//
//		registry.addInterceptor(myInterceptor()).excludePathPatterns(arrIgnoreUrl).addPathPatterns("/**");
//		// .excludePathPatterns("/api/**")
//		super.addInterceptors(registry);
//	}
//
//	/**
//	 * 配置全局类型转换器
//	 *
//	 * @return
//	 */
//	@Bean
//	@SuppressWarnings("rawtypes")
//	public ConversionService getConversionService() {
//
//		ConversionServiceFactoryBean factoryBean = new ConversionServiceFactoryBean();
//		Set<Converter>               converters  = new HashSet<Converter>();// 增加日期类型转
//
//		converters.add(new DateConverter());
//		factoryBean.setConverters(converters);
//
//		return factoryBean.getObject();
//	}
//
//	/**
//	 * 默认的json转方式
//	 *
//	 * @param converters
//	 */
//	@Override
//	public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
//		super.configureMessageConverters(converters);
//
//		FastJsonHttpMessageConverter fastConverter  = new FastJsonHttpMessageConverter();
//		FastJsonConfig               fastJsonConfig = new FastJsonConfig();
//
//		List<MediaType> supportedMediaTypes = new ArrayList<>();
//
//		supportedMediaTypes.add(MediaType.APPLICATION_JSON);
//		supportedMediaTypes.add(MediaType.APPLICATION_JSON_UTF8);
//		supportedMediaTypes.add(MediaType.APPLICATION_ATOM_XML);
//		supportedMediaTypes.add(MediaType.APPLICATION_FORM_URLENCODED);
//		supportedMediaTypes.add(MediaType.APPLICATION_OCTET_STREAM);
//		supportedMediaTypes.add(MediaType.APPLICATION_PDF);
//		supportedMediaTypes.add(MediaType.APPLICATION_RSS_XML);
//		supportedMediaTypes.add(MediaType.APPLICATION_XHTML_XML);
//		supportedMediaTypes.add(MediaType.APPLICATION_XML);
//		supportedMediaTypes.add(MediaType.IMAGE_GIF);
//		supportedMediaTypes.add(MediaType.IMAGE_JPEG);
//		supportedMediaTypes.add(MediaType.IMAGE_PNG);
//		supportedMediaTypes.add(MediaType.TEXT_EVENT_STREAM);
//		supportedMediaTypes.add(MediaType.TEXT_HTML);
//		supportedMediaTypes.add(MediaType.TEXT_MARKDOWN);
//		supportedMediaTypes.add(MediaType.TEXT_PLAIN);
//		supportedMediaTypes.add(MediaType.TEXT_XML);
//
//		fastConverter.setSupportedMediaTypes(supportedMediaTypes);
//
//		fastJsonConfig.setSerializerFeatures(SerializerFeature.DisableCircularReferenceDetect,
//				SerializerFeature.WriteMapNullValue);
//
//		fastConverter.setFastJsonConfig(fastJsonConfig);
//
//		// 将fastjson添加到视图消息转换器列表内
//		converters.add(fastConverter);
//	}
//
//	@Override
//	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
//		configurer.enable();
//	}
//
//	@Override
//	public void addCorsMappings(CorsRegistry registry) {// 允许全部请求跨域
//		registry.addMapping("/**")
//				.allowCredentials(true)
//				.allowedHeaders("*")
//				.allowedOrigins("*")
////				.allowedMethods("*")
//				.allowedMethods("GET", "POST", "DELETE", "PUT", "PATCH", "OPTIONS")
//		;
//	}
//}
