package com.vincent.rsf.server.common.config; import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.common.interceptor.severlet.DynamicFieldsInterceptor; import com.vincent.rsf.server.common.utils.Http; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.AsyncHandlerInterceptor; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * WebMvc配置, 拦截器、资源映射等都在此配置 * * @author vincent * @since 2019-06-12 10:11:16 */ @Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(getAsyncHandlerInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/swagger-resources/**", "/webjars/**","/erp/**", "/v2/**","/v3/**","/doc.html/**", "/swagger-ui.html/**"); registry.addInterceptor(dynamicFieldsInterceptor()) .addPathPatterns("/**") .excludePathPatterns("/swagger-resources/**", "/webjars/**", "/erp/**", "/v2/**", "/v3/**", "/doc.html/**", "/swagger-ui.html/**"); } @Bean public DynamicFieldsInterceptor dynamicFieldsInterceptor() { return new DynamicFieldsInterceptor(); } @Bean public AsyncHandlerInterceptor getAsyncHandlerInterceptor() { return new AsyncHandlerInterceptor(){ @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Http.cors(response); return true; } }; } @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/**").addResourceLocations("classpath:/static/"); 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/"); } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOriginPatterns("*") .allowedHeaders("*") .exposedHeaders(Constants.TOKEN_HEADER_NAME) .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS", "PATCH") .allowCredentials(true) .maxAge(3600); } public static void cors(HttpServletResponse response){ // 跨域设置 response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Allow-Headers", "*"); response.setHeader("Access-Control-Expose-Headers", Constants.TOKEN_HEADER_NAME); } }