天天看点

使用 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

,其它保持不变