天天看點

使用 Sa-Token 的全局過濾器解決跨域問題

SaTokenConfigure.java

中設定響應頭即可

/**
 * [Sa-Token 權限認證] 配置類 
 */
@Configuration
public class SaTokenConfigure {

	/**
     * 注冊 [sa-token全局過濾器] 
     */
    @Bean
    public SaServletFilter getSaServletFilter() {
        return new SaServletFilter()
        		.addInclude("/**").addExclude("/favicon.ico")
        		.setAuth(r -> {
        			// System.out.println("---------- sa全局認證");
        		})
        		.setError(e -> {
        			// System.out.println("---------- sa全局異常 ");
        			return AjaxJson.getError(e.getMessage());
        		})
        		// 前置函數:在每次認證函數之前執行
        		.setBeforeAuth(r -> {
        			// ---------- 設定跨域響應頭 ----------
        			SaHolder.getResponse()
        			// 允許指定域通路跨域資源
        			.setHeader("Access-Control-Allow-Origin", "*")
        			// 允許所有請求方式
        			.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE")
        			// 有效時間
        			.setHeader("Access-Control-Max-Age", "3600")
        			// 允許的header參數
        			.setHeader("Access-Control-Allow-Headers", "x-requested-with,satoken");
        			
        			// 如果是預檢請求,直接傳回
        			if ("OPTIONS".equals(SaHolder.getRequest().getMethod())) {
        				System.out.println("=======================浏覽器發來了OPTIONS預檢請求==========");
        				SaRouter.back();
        			}
        		})
        		;
    }
    
}
           

WebFlux 環境同理,隻不過把

SaServletFilter

更換為

SaReactorFilter

,其它保持不變