SpringBoot2.x整合Shiro出現cors跨域問題(踩坑記錄)


1. Springboot如何跨域?

最簡單的方法是:

定義一個配置CorsConfig類即可(是不是簡單且無耦合到令人發指)

@Configuration
public class CorsConfig {
 
    private CorsConfiguration buildConfig() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*");
        corsConfiguration.addAllowedHeader("*");
        corsConfiguration.addAllowedMethod("*");        
        corsConfiguration.setMaxAge(3600L);         // 預檢請求的有效期,單位為秒。
        corsConfiguration.setAllowCredentials(true);// 是否支持安全證書(必需參數)
        return corsConfiguration;
    }
 
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**", buildConfig());
        return new CorsFilter(source);
    }
}

 

不要用WebMvcConfigurerAdapter繼承的方法了,因為已經過時了,Springboot2.0已經不推薦此方法

此處有一個比較坑的地方就是:

corsConfiguration.setMaxAge(3600L);         // 預檢請求的有效期,單位為秒。
corsConfiguration.setAllowCredentials(true);// 是否支持安全證書(必需參數)

這兩句務必要加上,不然無論前端怎么做,也無論后台你對shiro的過濾器怎么重寫,response請求返回狀態都是302。

網絡上大家的代碼都是copy來copy去,往往沒有這2句,所以這個坑真是眼淚汪汪。

 

2. 前端在發送請求是,是否需要加上跨域參數?(以下兩句為跨域參數)

crossDomain: true,                       
xhrFields: {withCredentials: true},

答案是肯定的。

如果不加跨域參數,通過在ShiroConfig中配置某些URL不鑒權(匿名訪問),倒也可以(但是不推薦,你不可能把所有的URL都設置為匿名訪問,那要鑒權做什么?)。

filterChainDefinitionMap.put("/login/**", "anon");   //類似於URL路徑中含有login的不鑒權

那么這兩句的作用是什么?    -- 利用cookie維持session的會話跟蹤。

 

good luck!

 

 

參考文章:https://blog.csdn.net/wangchsh2008/article/details/90324631


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM