如果你在后端配置好了跨域配置。还是不生效的。来到这里希望会帮到你!
其实想快速追踪到问题的话。就从打断点开始。
我的猜想是。shiro的过滤器过滤优先级>cors的过滤器,所以才导致的此类问题
结果,果然是这样(以下图片,是我调整后的。所以corsFilter在shiroFilterFactoryBean之上)
所以要想解决这个问题,就要把cors的过滤器的优先级提升。
代码如下:
@Bean public FilterRegistrationBean filterRegistrationBean() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); bean.setOrder(0);//提升优先级 return bean; }
利用FilterRegistrationBean设置CorsFilter的优先级。其实设置filter优先级的有两种方式。另一种是增加注解@WebFilter进行设置。
顺便把跨域代码贴出来。
import org.springframework.boot.web.servlet.FilterRegistrationBean; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter;
@Configuration public class CorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsConfiguration = new CorsConfiguration(); corsConfiguration.addAllowedHeader("*"); corsConfiguration.addAllowedMethod("*"); corsConfiguration.addAllowedOriginPattern("*"); // 预检请求的有效期,单位为秒。 corsConfiguration.setMaxAge(3600L); // 是否支持安全证书(必需参数) corsConfiguration.setAllowCredentials(true); return corsConfiguration; } @Bean public FilterRegistrationBean filterRegistrationBean() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); FilterRegistrationBean bean = new FilterRegistrationBean(new CorsFilter(source)); bean.setOrder(0); return bean; } }
希望上面的描述,能帮到你解惑