nginx satoken 外网域名配置 cors

    // 注册 Sa-Token全局过滤器
    @Bean
    public SaReactorFilter getSaReactorFilter() {
        return new SaReactorFilter()
                // 拦截地址
                .addInclude("/**")
                //knife4j 文档不拦截
                .addExclude("/doc.html", "/webjars/**", "/swagger-resources")
                // 鉴权方法:每次访问进入
                .setAuth(obj -> {
                    SaRequest request = SaHolder.getRequest();
                    if (log.isDebugEnabled()) {
                        log.debug(request.getUrl());
                    }
                    // 登录校验 -- 拦截所有路由,开放登录接口
                    SaRouterStaff routerStaff = SaRouter.match("/**", "/auth/api/open/**", r -> StpUtil.checkLogin());
                    if (routerStaff.isHit) {
                       
                    }
                })
                // 异常处理方法:每次setAuth函数出现异常时进入
                .setError(e -> {
                    if (e instanceof NotLoginException) {
                        log.error("token失效!");
                    } else {
                        e.printStackTrace();
                        log.error("error!", e);
                    }
                    return Result.fail(e.getMessage());
                }) // 前置函数:在每次认证函数之前执行
                .setBeforeAuth(o -> {
                    this.configCross();
                });
    }


    /**
     * 配置跨域
     */
    private void configCross() {
        // ---------- 设置跨域响应头 ----------
        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", "*");

        // 如果是预检请求,则立即返回到前端
        SaRouter.match(SaHttpMethod.OPTIONS).free(r -> log.warn("--------OPTIONS预检请求,不做处理")).back();
    }



server {
    listen 80;
    #此处应配置  否则不存在的会跨域
    server_name www.xxxx.com xxxx.com;

    #应放开对options请求拦截
    if ($request_method !~ ^(GET|POST|OPTIONS)$) {
      return 403;
    }
  


  }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
回答: 在使用nginx代理或者服务器配置CORS时,可以通过在nginx配置文件中添加相关header来解决跨域访问的问题。一般情况下,配置以下header可以解决简单请求的跨域处理:设置Access-Control-Allow-Origin字段为请求的来源,设置Access-Control-Allow-Methods字段为允许的请求方法,设置Access-Control-Allow-Credentials字段为true以允许发送Cookie到服务器。此,还可以设置Access-Control-Allow-Headers字段来指定允许的请求头,设置Access-Control-Max-Age字段来指定预检请求的有效期。在nginx的标准配置中,可以使用类似以下的配置来实现CORS:\[3\] ``` server { ... set $cors_origin ""; if ($http_origin ~* "^http://api.xx.com$"){ set $cors_origin $http_origin; } add_header Access-Control-Allow-Origin $cors_origin always; add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS always; add_header Access-Control-Allow-Credentials true always; add_header Access-Control-Allow-Headers DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Authorization,x-auth-token always; add_header Access-Control-Max-Age 1728000 always; if ($request_method = OPTIONS) { return 204; } ... } ``` 通过以上配置,可以实现对CORS的处理,并解决跨域访问的问题。 #### 引用[.reference_title] - *1* *2* *3* [Nginx 跨域设置(CORS)](https://blog.csdn.net/yujia_666/article/details/108490178)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

等一场春雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值