Spring boot - WebMvcConfig 解決跨域,接收自定義請求頭引數
阿新 • • 發佈:2018-12-18
import com.jyt.vchat.Interceptor.CommonInterceptor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter; @Configuration public class WebMvcConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { //Swagger ui Mapping registry.addResourceHandler("swagger-ui.html") .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/webjars/**") .addResourceLocations("/webjars/"); // registry.addResourceHandler("/druid/**") // .addResourceLocations("classpath:/META-INF/resources/"); registry.addResourceHandler("/static/**") .addResourceLocations("classpath:/static/"); } @Bean public CorsFilter corsFilter() { final UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); final CorsConfiguration config = new CorsConfiguration(); config.setAllowCredentials(true); config.addAllowedOrigin("*"); config.addAllowedHeader("*"); //config.addAllowedMethod("OPTIONS"); //config.addAllowedMethod("HEAD"); //config.addAllowedMethod("GET"); //config.addAllowedMethod("PUT"); //config.addAllowedMethod("POST"); //config.addAllowedMethod("DELETE"); //config.addAllowedMethod("PATCH"); config.addAllowedMethod("*"); source.registerCorsConfiguration("*//**", config); return new CorsFilter(source); } @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(new CommonInterceptor()); super.addInterceptors(registry); } }
CommonInterceptor.java
public class CommonInterceptor implements HandlerInterceptor { private List<String> excludedUrls; public List<String> getExcludedUrls() { return excludedUrls; } public void setExcludedUrls(List<String> excludedUrls) { this.excludedUrls = excludedUrls; } /** * * 在業務處理器處理請求之前被呼叫 如果返回false * 從當前的攔截器往回執行所有攔截器的afterCompletion(), * 再退出攔截器鏈, 如果返回true 執行下一個攔截器, * 直到所有的攔截器都執行完畢 再執行被攔截的Controller * 然後進入攔截器鏈, * 從最後一個攔截器往回執行所有的postHandle() * 接著再從最後一個攔截器往回執行所有的afterCompletion() * * @param request * * @param response */ public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { response.setHeader("Access-Control-Allow-Origin", "*"); response.setHeader("Access-Control-Allow-Methods", "*"); response.setHeader("Access-Control-Max-Age", "3600"); response.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept,token"); return true; } // 在業務處理器處理請求執行完成後,生成檢視之前執行的動作 public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { } /** * * 在DispatcherServlet完全處理完請求後被呼叫 * 當有攔截器丟擲異常時, * 會從當前攔截器往回執行所有的攔截器的afterCompletion() * * @param request * * @param response * * @param handler * */ public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { } }