未解决跨域问题时访问后台出现如下错误:
No 'Access-Control-Allow-Origin' header is present on the requested resource...
解决步骤如下:
1. 在WebSecurityConfig配置中开启跨域支持,部分代码如下:
//开启跨域
.cors()
.and()
.csrf()
.disable()
.authorizeRequests()
//处理跨域请求中的Preflight请求
.requestMatchers( CorsUtils::isPreFlightRequest ).permitAll()
2.在需要跨域的Controller层上加上注解@CrossOrigin,如:
@CrossOrigin
@RestController
public class LoginController extends BaseController {
...
}
虽然解决了需要跨域的Controller问题,但是像springsecurity的/login默认登录方法,还是无法解决跨域问题,需要进行以下配置
3.自定义CorsConfig类,彻底解决跨域问题
@Configuration
public class CorsConfig implements WebMvcConfigurer {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
corsConfiguration.addAllowedOrigin("*");
corsConfiguration.addAllowedHeader("*");
corsConfiguration.addAllowedMethod("*");
corsConfiguration.addExposedHeader("Authorization");
return corsConfiguration;
}
@Bean
public CorsFilter corsFilter() {
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
加上这段配置后,需要跨域的Controller不需要加@CrossOrigin注解也可实现跨域,跨域问题完美解决!
关注我的微信公众号获取更多资源

1198





