SpringMVCインターセプタInterceptorはcorsを越えて失効し、Headerが取得できない

5694 ワード

起因:
String authorization = request.getHeader("Authorization");

ブロックでheaderを取得するAuthorizationは空ですが、postmanは正常なフロントエンドでドメイン間エラーを報告し、controllerに@CrossOriginが構成されています.
プロジェクトは前後の分離を採用し、サーバー側はグローバルなドメイン間構成を追加したが、ドメイン間問題が発生し、複数回の要求を分析したところ、一部の要求がドメイン間ではなく、ドメイン間ではない要求がちょうどブロッカーの放行のアドレスであることが分かったので、分析は権限ブロッカー処理がドメイン間処理の前に行われ、ドメイン間構成が失効した可能性がある.
フィルタCorsFilterを使用してドメイン間を構成します.Filterの位置はInterceptorの前にあるため、問題は解決されました.
@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);
    }
    

}