项目中有多个Filter时,需要通过
@Order(Ordered.HIGHEST_PRECEDENCE)
注解设置过滤器的执行顺序
order的规则
1. order的值越小,优先级越高
2. order如果不标注数字,默认最低优先级,因为其默认值是int最大值
3. 该注解等同于实现Ordered接口getOrder方法,并返回数字。
如果使用如下注释掉的方法进行设置跨域,Filter的doFilter()方法中直接return出去时,前端会提示跨域
因为这个CorsConfig并没有实现Filter接口,即使加上
@Order
注解也不会生效,需要通过如下新的方式返回一个新的FilterRegistrationBean出去,并设置order
import com.nanase.takeshi.constants.JwtConstant;
import lombok.extern.slf4j.Slf4j;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.Ordered;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
/**
* CorsConfig
* 跨域请求配置
*
* @author 725
* @date 2020/12/10 18:17
*/
@Slf4j
@Configuration
public class CorsConfig {
private CorsConfiguration buildConfig() {
CorsConfiguration corsConfiguration = new CorsConfiguration();
// 1 设置访问源地址
corsConfiguration.addAllowedOrigin("*");
// 2 设置访问源请求头
corsConfiguration.addAllowedHeader("*");
// 3 设置访问源请求方法
corsConfiguration.addAllowedMethod("*");
// 4 暴露哪些头部信息
corsConfiguration.addExposedHeader(JwtConstant.HEADER);
return corsConfiguration;
}
/**
@Bean
public CorsFilter corsFilter() {
log.info("跨域设置。。。。");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
return new CorsFilter(source);
}
*/
@Bean
public FilterRegistrationBean<CorsFilter> corsFilter() {
log.info("跨域设置。。。。");
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
// 5 对接口配置跨域设置
source.registerCorsConfiguration("/**", buildConfig());
//有多个filter时此处设置改CorsFilter的优先执行顺序
FilterRegistrationBean<CorsFilter> bean = new FilterRegistrationBean<>(new CorsFilter(source));
bean.setOrder(Ordered.HIGHEST_PRECEDENCE);
return bean;
}
}
版权声明:本文为xw_725原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。