El interceptor SpringMVC Interceptor hace que los cors transversales fallen y no se puede obtener el encabezado

版权声明:本文为CSDN博主「大大大k」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43037886/article/details/104601886

origen:

String authorization = request.getHeader("Authorization");

La autorización en el encabezado obtenido en el interceptor está vacía, pero la prueba del cartero es normal. El
front-end informa un error de dominio cruzado y @CrossOrigin se ha configurado en el controlador.

El proyecto adopta la separación de front-end y back-end, y la configuración global de dominio cruzado se agrega en el lado del servidor, pero ocurren problemas de dominio cruzado.Después de analizar múltiples solicitudes, se encuentra que algunas solicitudes no aparecen entre dominios, y las solicitudes que no aparecen entre dominios simplemente son liberadas por el interceptor.La dirección, por lo que el análisis puede ser que el procesamiento del interceptor de permisos se realiza antes del procesamiento entre dominios, lo que conduce a la falla de la configuración entre dominios .

Utilice el filtro CorsFilter para configurar cross-domain.Como el Filter se encuentra antes que el Interceptor , el problema está resuelto:

@Configuration
public class SystemConfig implements WebMvcConfigurer {
    
    
  @Autowired
  private JwtInterceptor jwtInterceptor;

  /**
   * 添加拦截器配置
   *
   * @param registry
   */
  @Override
  public void addInterceptors(InterceptorRegistry registry) {
    
    
      registry.addInterceptor(jwtInterceptor)
              //指定拦截器url地址
              .addPathPatterns("/**")
      .excludePathPatterns("/sys/login","/frame/register/**");
  }
  
  /**
   * 跨越配置
   * 改用过滤器CorsFilter 来配置跨域,由于Filter的位置是在Interceptor之前的,问题得到解决:
   */
  @Bean
  public CorsFilter corsFilter() {
    
    
      CorsConfiguration config = new CorsConfiguration();
      // 设置允许跨域请求的域名
      config.addAllowedOrigin("*");
      // 是否允许证书 不再默认开启
      // config.setAllowCredentials(true);
      // 设置允许的方法
      config.addAllowedMethod("*");
      // 允许任何头
      config.addAllowedHeader("*");
      config.addExposedHeader("token");
      UrlBasedCorsConfigurationSource configSource = new UrlBasedCorsConfigurationSource();
      configSource.registerCorsConfiguration("/**", config);
      return new CorsFilter(configSource);
  }

}

Originalmente configuré el filtro en un archivo separado y no lo configuré en el mismo archivo que el interceptor, por lo que no funcionó y luego lo configuré de acuerdo con el código anterior.

Supongo que te gusta

Origin blog.csdn.net/wejack/article/details/131730145
Recomendado
Clasificación