配置类
public class CorsConfig {
//需要什么对象用注解@Bean来获取,返回值是要取得的对象类型
//此时需要把过滤器注册到servletContext中
CrmConfig.Cors c = CrmConfig.getCors();//获得内部类对象
@Bean
public FilterRegistrationBean corsFilter(){
//内部提供了register方法注册过滤器,同时注册到servletContext
UrlBasedCorsConfigurationSource us = new UrlBasedCorsConfigurationSource();
Map<String, CorsConfiguration> map = new HashMap<>(10);
CorsConfiguration ccf = new CorsConfiguration();
ccf.setAllowCredentials(c.getCredentials());
ccf.setAllowedHeaders(c.getHeaders());
ccf.setAllowedMethods(c.getMethods());
ccf.setExposedHeaders(c.getExposedHeader());
ccf.setAllowedOrigins(c.getOrigins());
map.put(c.getPath(),ccf);
us.setCorsConfigurations(map);
FilterRegistrationBean fb = new FilterRegistrationBean(new CorsFilter(us));//传一个跨域过滤器
//设置执行顺序
fb.setOrder(1);
return fb;
}
}
配置对象(配置参数类)
@Component
@ConfigurationProperties(prefix = "crm")
public class CrmConfig {
//自定义一个配置对象,用来存放自定义配置数据(不是配置类,是供配置类依赖的参数配置)
//把自定义对象注入容器(放在主配置类层级下,不然扫描不到)
//启用配置文件注解并设置前缀
private Map<String,Object> aaa;
public static Cors getCors() {
return cors;
}
public static void setCors(Cors cors) {
CrmConfig.cors = cors;
}
private static Cors cors; //将内部配置类写为成员变量并设置get set 方法
// 内部配置类
public static class Cors{
private String path;
private List<String> methods;
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public List<String> getMethods() {
return methods;
}
public void setMethods(List<String> methods) {
this.methods = methods;
}
public List<String> getHeaders() {
return headers;
}
public void setHeaders(List<String> headers) {
this.headers = headers;
}
public List<String> getOrigins() {
return origins;
}
public void setOrigins(List<String> origins) {
this.origins = origins;
}
public Boolean getCredentials() {
return credentials;
}
public void setCredentials(Boolean credentials) {
this.credentials = credentials;
}
public List<String> getExposedHeader() {
return exposedHeader;
}
public void setExposedHeader(List<String> exposedHeader) {
this.exposedHeader = exposedHeader;
}
public Long getMaxAge() {
return maxAge;
}
public void setMaxAge(Long maxAge) {
this.maxAge = maxAge;
}
private List<String> headers;
private List<String> origins;
private Boolean credentials;
private List<String> exposedHeader;
private Long maxAge;
}
public Map<String, Object> getAaa() {
return aaa;
}
public void setAaa(Map<String, Object> aaa) {
this.aaa = aaa;
}
}
配置文件
crm:
cors:
path: /**
methods: [GET,POST,PUT,DELETE,OPTIONS]
header: []
origins: [http://localhost:8082]
credentials: true
exposeHeaders: [admin_token]
maxAge: 1800