shiro攔截後地址跳轉跨域

謊言的舞蹈發表於2020-11-17

不使用@CrosOrigin註解解決跨域問題,使用過濾器:示例使用CorsFilter,也就是一個封裝瞭解決跨域問題的filter而已。

由於CorsFilter是定義在Web容器中的過濾器(實現了javax.servlet.Filter),因此其執行順序先於Servlet,而SpringMVC的入口是DispatchServlet,因此該Filter會先於SpringMVC的所有攔截器執行。分析程式碼可知,CorsFilter可以對獲取的單個請求對應的Cors配置做相應的處理。這樣當請求到達攔截器前,做跨域嗅探的OPTIONS請求已經得到答案返回了,經過測試並不會到達攔截器。

package com.example.pahms.config;

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 GlobalCorsConfig {

    @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);
    }

}


相關文章