1. 首页
  2. 编程面试题
  3. Java
  4. SpringBoot

Spring Boot中如何解决跨域问题?



推荐在后端通过(CORS,Cross-origin resource sharing)来解决跨域问题。这种解决方案并非Spring Boot特有的,在传统的SSM框架中,就可以通过
CORS来解决跨域问题,只不过之前我们是在XML文件中配置CORS,现在可以通过实现
WebMvcConfigurer接口然后重写addCorsMappings方法解决跨域问题。


@Configuration
public class CorsConfig implements WebMvcConfigurer {
	@Override
	public void addCorsMappings(CorsRegistry registry) {
		registry.addMapping("/**")
		.allowedOrigins("*")
		.allowCredentials(true)
		.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
		.maxAge(3600);
	}
}

项目中前后端分离部署,所以需要解决跨域的问题。
我们使用cookie存放用户登录的信息,在spring拦截器进行权限控制,当权限不符合时,直接返回给用户固定的json结果。
当用户登录以后,正常使用;当用户退出登录状态时或者token过期时,由于拦截器和跨域的顺序有问题,出现了跨域的现象。
我们知道一个http请求,先走filter,到达servlet后才进行拦截器的处理,如果我们把cors放在filter里,就可以优先于权限拦截器执行。


@Configuration
public class CorsConfig {
@Bean
public CorsFilter corsFilter() {
	CorsConfiguration corsConfiguration = new CorsConfiguration();
	corsConfiguration.addAllowedOrigin("*");
	corsConfiguration.addAllowedHeader("*");
	corsConfiguration.addAllowedMethod("*");
	corsConfiguration.setAllowCredentials(true);
	UrlBasedCorsConfigurationSource urlBasedCorsConfigurationSource = new
	UrlBasedCorsConfigurationSource();
	urlBasedCorsConfigurationSource.registerCorsConfiguration("/**",
	corsConfiguration);
	return new CorsFilter(urlBasedCorsConfigurationSource);
    }
}

发布者:admin,如若转载,请注明出处:https://ai1024.vip/26976.html

QR code
//