全局配置
全局配置-实现 WebMvcConfigurer
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.HttpHeaders;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration
public class CorsConfig implements WebMvcConfigurer {
@Bean
public WebMvcConfigurer corsConfigurer(){
return new WebMvcConfigurer() {
public void addCorsMappings(CorsRegistry registry){
registry.addMapping("/**")
.allowedOrigins("*")
.allowedMethods("*")
.allowedHeaders("*")
.exposedHeaders(HttpHeaders.SET_COOKIE).maxAge(3600L);
}
};
}
}
为什么实现了WebMvcConfigurer就可以实现全局跨域?
WebMvcConfigurer简介
WebMvcConfigurer配置类其实是Spring内部的一种配置方式,采用JavaBean的形式来代替传统的XMl配置文件,从而进行框架个性化定制。可以自定义一些Handler,Interceptor,ViewResolver,MessageConverter。
定制Spring MVC配置,需要创建一个配置类并实现WebMvcConfigurer 接口。Spring5.0之前的版本,Spring推荐的是通过继承WebMvcConfigurerAdapter的方式来扩展mvc相关配置,Sping5.0之后,由于JDK8中接口支持默认方法的新特性 ,WebMvcConfigurerAdapter已被标记为Depercated,可直接实现WebMvcConfigurer。
@Configuration,@Bean
WebMvcConfigurer的子类是被DelegatingWebMvcConfiguration类通过注入的方式读取到的,由于使用@Autowired的方式,所以要求我们自定义的类必须使用@Configuration或者@Bean,@Component等注解,保证这个类被Spring容器管理才可以生效。
局部配置
@CrossOrigin 注解
@CrossOrigin(origins="http://domain.com")
public class ArticleController {
@GetMapping(value="test")
public void test(){
}
}
参数
- origins 允许可访问的域列表
- maxAge 准备响应前的缓存持续的最大时间(以秒为单位)