关于springboot的跨域配置问题的解决方案
传统跨域是springboot中CorsRegistry添加添加处理的CorsMapping,这种跨域处理可以处理controller的请求。
@Configuration public class CorsConfig implements WebMvcConfigurer { static final String[] ORIGINS = new String[] { "GET", "POST", "PUT", "DELETE" }; @Override public void addCorsMappings(CorsRegistry registry) { // 所有的当前站点的请求地址,都支持跨域访问。 registry.addMapping("/**") // 所有的外部域都可跨域访问 .allowedOrigins("*") // 是否支持跨域用户凭证 .allowCredentials(true) // 当前站点支持的跨域请求类型是什么 .allowedMethods(ORIGINS) // 超时时长设置为1小时,时间单位是秒。 .maxAge(3600); } }
但如果遇到spring boot集成spring security的时候,登录时处理是在filter中的,传统的跨域没有办法处理,这时候我们要采用一种新的实现方案:基于filter的跨域实现。
基于filter实现可以处理filter中的跨域问题,这里原理很简单,需要注意是要设置CorsFilter的优先级:Ordered.HIGHEST_PRECEDENCE(加载到过滤器链最前面!!!)
@Configuration public class CorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addExposedHeader("*"); return corsConfiguration; } @Bean public FilterRegistrationBean<CorsFilter> corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); // 对接口配置跨域设置 source.registerCorsConfiguration("/**", buildConfig()); //有多个filter时此处设置改CorsFilter的优先执行顺序 FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source)); bean.setOrder(Ordered.HIGHEST_PRECEDENCE); return bean; } }
经过测试,这种处理方法可以轻松应对springboot的跨域问题。
到此这篇关于关于springboot的跨域配置问题的解决方案的文章就介绍到这了,更多相关springboot跨域配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Java Hutool工具实现验证码生成及Excel文件的导入和导出
Hutool是一个小而全的Java工具类库,通过静态方法封装,降低相关API的学习成本,提高工作效率,本文主要介绍了使用Hutool工具实现验证码生成和excel文件的导入、导出,需要的朋友可参考一下2021-11-11MyBatis-Flex+ShardingSphere-JDBC多数据源分库分表实现
本文介绍了使用MyBatis-Flex和ShardingSphere-JDBC实现多数据源分库分表的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2024-10-10
最新评论