springboot 解决跨域问题
记录贴:
测试可用的后端简单实现解决跨域访问的方法
第一种方法:
在controller层接口类添加注解
@RestController
@RequestMapping("/ais/")
@CrossOrigin
public class AisMessageController {
第二种方法:
添加全局跨域访问配置类
SpringBoot2.4.0 前使用addAllowedOrigin("*");
SpringBoot2.4.0 后 用[allowedOriginPatterns]代替[allowedOrigins]
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 GlobalCorsConfig {
@Bean
public CorsFilter corsFilter() {
CorsConfiguration config = new CorsConfiguration();
config.setAllowCredentials(true);
// config.addAllowedOrigin("*");
config.addAllowedOriginPattern("*");// SpringBoot2.4.0 [allowedOriginPatterns]代替[allowedOrigins]
config.addAllowedMethod("*");
config.addAllowedHeader("*");
config.addExposedHeader("*");
UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
configSource.registerCorsConfiguration("/**", config);
return new CorsFilter(configSource);
}
}
第三种方法
实现WebMvcConfigurer 类
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
String[] patterns = new String[]{"/register/*","/login/*","/swagger-resources/**","/swagger-ui.html/**","/webjars/**"};
registry.addInterceptor(new JwtInterceptor())
// 拦截所有请求
.addPathPatterns("/**")
//不需要的拦截请求
//然后添加释放路径
.excludePathPatterns("/**");
}
// 跨域配置
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowCredentials(true)
.allowedHeaders("*")
.allowedOriginPatterns("*")
.allowedMethods("POST", "GET", "PUT", "OPTIONS", "DELETE")
.maxAge(3600);
}
}