package org.sang; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class MyWebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/book/**") .allowedHeaders("*") .allowedMethods("*") .maxAge(1800) .allowedOrigins("http://localhost:8081"); } }
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowCredentials(true) .allowedOrigins("*") .allowedMethods("GET", "POST", "OPTIONS") .maxAge(3600); } }
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; @Configuration public class CorsConfig { @Bean public CorsFilter corsFilter() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.setAllowCredentials(Boolean.TRUE); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); return new CorsFilter(urlBasedCorsConfigurationSource); } }
No mapping for GET /swagger-ui.html報錯
配置類繼承了WebMvcConfigurationSupport,則在配置文件在中配置的相關內容會失效,需要重新指定靜態資源
需要重新指定swagger靜態資源或改成實現WebMvcConfigurer就可以了
/** * 發現如果繼承了WebMvcConfigurationSupport,則在yml中配置的相關內容會失效。 需要重新指定靜態資源 * 跨域配置后swagger2可能不能訪問,需要增加如下配置 * @param registry */ @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/"); super.addResourceHandlers(registry); }
或
@Configuration @EnableWebMvc public class CorsConfig implements WebMvcConfigurer{ /* * 這里主要為了解決跨域問題,所以重寫addCorsMappings方法 */ // @Override // public void addCorsMappings(CorsRegistry registry) { // registry.addMapping("/**") // .allowedOrigins("*") // .allowedMethods("*") // .allowedHeaders("*") // .exposedHeaders("access-control-allow-headers", // "access-control-allow-methods", // "access-control-allow-origin", // "access-control-max-age", // "X-Frame-Options") // .allowCredentials(true).maxAge(3600); // super.addCorsMappings(registry); // } @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowCredentials(true) // .allowedOrigins("*") .allowedOriginPatterns("*") .allowedMethods("GET", "POST", "OPTIONS") .maxAge(3600); } // @Bean // public CorsFilter corsFilter() { // CorsConfiguration corsConfiguration = new CorsConfiguration(); // corsConfiguration.setAllowCredentials(Boolean.TRUE); // corsConfiguration.addAllowedOrigin("*"); // corsConfiguration.addAllowedHeader("*"); // corsConfiguration.addAllowedMethod("*"); // UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new UrlBasedCorsConfigurationSource(); // urlBasedCorsConfigurationSource.registerCorsConfiguration("/**", corsConfiguration); // return new CorsFilter(urlBasedCorsConfigurationSource); // } // @Override // public void addCorsMappings(CorsRegistry registry) { // // 設置允許跨域的路徑 // registry.addMapping("/**") // // 設置允許跨域請求的域名 // .allowedOrigins("*") // // 是否允許證書 不再默認開啟 // .allowCredentials(true) // // 設置允許的方法 // .allowedMethods("*") // // 跨域允許時間 // .maxAge(3600); // } // /** // * 發現如果繼承了WebMvcConfigurationSupport,則在yml中配置的相關內容會失效。 需要重新指定靜態資源 // * 跨域配置后swagger2可能不能訪問,需要增加如下配置 // * @param registry // */ // @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/"); // super.addResourceHandlers(registry); // } }