package com.terra.system.config;
|
|
import com.alibaba.fastjson.serializer.SerializerFeature;
|
import com.alibaba.fastjson.support.config.FastJsonConfig;
|
import com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter;
|
import com.alibaba.fastjson2.JSON;
|
import com.terra.system.interceptor.AuthInterceptor;
|
import com.terra.system.service.all.SysService;
|
import javax.annotation.Resource;
|
import javax.servlet.http.HttpServletRequest;
|
|
import org.springframework.context.annotation.Configuration;
|
import org.springframework.core.Ordered;
|
import org.springframework.http.MediaType;
|
import org.springframework.http.converter.HttpMessageConverter;
|
import org.springframework.util.AntPathMatcher;
|
import org.springframework.web.context.request.RequestContextHolder;
|
import org.springframework.web.context.request.ServletRequestAttributes;
|
import org.springframework.web.servlet.config.annotation.*;
|
import reactor.core.Exceptions;
|
|
import java.io.IOException;
|
import java.nio.charset.Charset;
|
import java.nio.charset.StandardCharsets;
|
import java.util.Collections;
|
import java.util.List;
|
|
/**
|
* Web配置类
|
* @author WWW
|
*/
|
@Configuration
|
public class WebConfig extends WebMvcConfigurationSupport {
|
@Resource
|
private SysService sysService;
|
|
@Override
|
public void addViewControllers(ViewControllerRegistry registry) {
|
// 设置访问路径为 “/” 跳转到指定页面
|
registry.addViewController("/").setViewName("redirect:/sign/toIndex");
|
// 设置为最高优先级
|
registry.setOrder(Ordered.HIGHEST_PRECEDENCE);
|
}
|
|
/**
|
* 获取拦截器对象
|
*
|
* @return
|
*/
|
public AuthInterceptor getAuthBean() {
|
return new AuthInterceptor(sysService);
|
}
|
|
/**
|
* swagger控制
|
*/
|
@Override
|
protected void addResourceHandlers(ResourceHandlerRegistry registry) {
|
registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
|
//registry.addResourceHandler("swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
|
registry.addResourceHandler("/swagger-ui/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
|
registry.addResourceHandler("/druid/**").addResourceLocations("classpath:/META-INF/resources/druid/");
|
registry.addResourceHandler("/**").addResourceLocations("classpath:/static/");
|
super.addResourceHandlers(registry);
|
}
|
|
/**
|
* 忽略url地址大小写
|
*/
|
@Override
|
protected void configurePathMatch(PathMatchConfigurer configurer) {
|
AntPathMatcher matcher = new AntPathMatcher();
|
matcher.setCaseSensitive(false);
|
|
configurer.setPathMatcher(matcher);
|
}
|
|
/**
|
* 跨域请求
|
*/
|
/*@Override
|
protected void addCorsMappings(CorsRegistry registry) {
|
registry.addMapping("/**")
|
.allowCredentials(true)
|
.allowedOrigins("*")
|
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
|
.allowedHeaders("*")
|
.maxAge(3600);
|
}*/
|
|
/**
|
* 添加统一的拦截器
|
*/
|
@Override
|
protected void addInterceptors(InterceptorRegistry registry) {
|
registry.addInterceptor(getAuthBean())
|
// .excludePathPatterns("/swagger", "/webjars/**", "/v2/**", "/sign/**")
|
//.excludePathPatterns("/v3/api-docs")
|
.addPathPatterns("/**");
|
super.addInterceptors(registry);
|
}
|
|
/**
|
* 处理json格式,值null的转换为""
|
*/
|
@Override
|
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
|
//FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter();
|
FastJsonHttpMessageConverter converter = new FastJsonHttpMessageConverter() {
|
@Override
|
protected void writeInternal(Object object, org.springframework.http.HttpOutputMessage outputMessage)
|
throws IOException, org.springframework.http.converter.HttpMessageNotWritableException {
|
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
|
if (attributes != null) {
|
String requestURI = attributes.getRequest().getRequestURI();
|
if ("/v3/api-docs".equals(requestURI)) { // 排除 /v3/api-docs 路径
|
// 使用默认的 JSON 序列化(如 Jackson),这里需要手动处理,不能直接调用 super.writeInternal
|
outputMessage.getBody().write(String.valueOf(object).getBytes());
|
return;
|
}
|
}
|
super.writeInternal(object, outputMessage); // 其他路径使用 Fastjson2 处理
|
}
|
};
|
|
FastJsonConfig config = new FastJsonConfig();
|
config.setSerializerFeatures(
|
SerializerFeature.WriteNullListAsEmpty,
|
SerializerFeature.WriteMapNullValue,
|
//SerializerFeature.WriteNullStringAsEmpty,
|
SerializerFeature.WriteNullNumberAsZero,
|
SerializerFeature.WriteNullBooleanAsFalse);
|
// 结果是否格式化,默认为false
|
//SerializerFeature.PrettyFormat);
|
|
converter.setFastJsonConfig(config);
|
converter.setDefaultCharset(StandardCharsets.UTF_8);
|
converter.setSupportedMediaTypes(Collections.singletonList(
|
MediaType.APPLICATION_JSON
|
));
|
converters.add(converter);
|
}
|
}
|