前后端分离 前端访问后端 报 403 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
ChunkitAu

前后端分离 前端访问后端 报 403

  •  
  •   ChunkitAu Feb 29, 2020 5500 views
    This topic created in 2249 days ago, the information mentioned may be changed or developed.

    前端 ajax:

    $.ajax({ url:"http://127.0.0.1:8080/blog/type/5", dataType:"JSON", type: "GET", contentType:'application/json;charset=', crossDomain: true, success: function (result) {} }) 

    后端 CROS 配置:

    @Configuration public class CorsConfig { private CorsConfiguration buildConfig() { CorsConfiguration corsCOnfiguration= new CorsConfiguration(); corsConfiguration.addAllowedOrigin("*"); corsConfiguration.addAllowedHeader("X-Requested-With,content-type,token"); corsConfiguration.addAllowedMethod("GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS, PATCH"); corsConfiguration.setMaxAge(3600L); // 预检请求的有效期,单位为秒。 corsConfiguration.setAllowCredentials(true);// 是否支持安全证书(必需参数) return corsConfiguration; } @Bean public CorsFilter corsFilter() { UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", buildConfig()); return new CorsFilter(source); } } 请求网址:http://127.0.0.1:8080/blog/type/5 请求方法:OPTIONS 远程地址:127.0.0.1:8080 状态码: 403 版本:HTTP/1.1 Referrer 政策:no-referrer-when-downgrade 

    请求头:

    Host: 127.0.0.1:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:71.0) Gecko/20100101 Firefox/71.0 Accept: */* Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2 Accept-Encoding: gzip, deflate Access-Control-Request-Method: GET Access-Control-Request-Headers: content-type Referer: http://localhost:63343/MyBlog/index.html?_ijt=hbbpnj3pufuv05obggpj706936 Origin: http://localhost:63343 Connection: keep-alive Cache-Control: max-age=0 

    响应头:

    HTTP/1.1 403 Vary: Origin Vary: Access-Control-Request-Method Vary: Access-Control-Request-Headers Transfer-Encoding: chunked Date: Sat, 29 Feb 2020 02:18:33 GMT Keep-Alive: timeout=60 Connection: keep-alive 

    http://127.0.0.1:8080/blog/type/5 网站可以正常访问

    之前有个项目 相同配置 可以运行 求解

    18 replies    2020-02-29 15:44:15 +08:00
    npe
        1
    npe  
       Feb 29, 2020 via iPhone
    跨域问题
    ChunkitAu
        2
    ChunkitAu  
    OP
       Feb 29, 2020
    我知道是跨域问题 问题是我不知道怎么处理 小白 希望大佬给点提示 后端 试过 addAllowedHeader addAllowedMethod 设置* 都不行
    shakaraka
        3
    shakaraka  
    PRO
       Feb 29, 2020
    1、Origin 最好设置固定 host
    2、OPTIONS 单独处理,返回 200 或者 201,不然预检过不了
    Yumwey
        4
    Yumwey  
       Feb 29, 2020
    proxy
    6IbA2bj5ip3tK49j
        5
    6IbA2bj5ip3tK49j  
       Feb 29, 2020 via iPhone
    用了 spring security 吗?
    ChunkitAu
        6
    ChunkitAu  
    OP
       Feb 29, 2020 via Android
    @xgfan 没有
    ChunkitAu
        7
    ChunkitAu  
    OP
       Feb 29, 2020 via Android
    @wunonglin origin 固定为请求的地址 都不行
    shakaraka
        8
    shakaraka  
    PRO
       Feb 29, 2020
    @ChunkitAu #7 OPTIONS 单独处理了吗
    gwy15
        9
    gwy15  
       Feb 29, 2020
    反正要挂到 nginx 后面,不如直接把 CORS 放到 nginx 上做;开发机也搭个 nginx 完事儿
    ChunkitAu
        10
    ChunkitAu  
    OP
       Feb 29, 2020
    @wunonglin

    @Component
    public class CORSInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws
    Exception {


    if("OPTIONS".equals(request.getMethod())) {
    response.addHeader("Access-Control-Allow-Origin", "*");
    response.addHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");
    response.addHeader("Access-Control-Allow-Headers", "Accept, Origin, XRequestedWith, Content-Type,
    LastModified, token");
    return false;
    }
    return true;
    }
    }
    不行
    CodeJr
        11
    CodeJr  
       Feb 29, 2020
    这是我的跨域配置的方案:

    、、、

    @Bean
    public CorsFilter corsFilter() {
    //1.添加 CORS 配置信息
    CorsConfiguration cOnfig= new CorsConfiguration();
    //放行哪些原始域
    config.addAllowedOrigin("*");
    //是否发送 Cookie 信息
    config.setAllowCredentials(true);
    //放行哪些原始域(请求方式)
    config.addAllowedMethod("*");
    //放行哪些原始域(头部信息)
    config.addAllowedHeader("*");
    //暴露哪些头部信息(因为跨域访问默认不能获取全部头部信息)
    config.addExposedHeader("Content-Type");
    config.addExposedHeader("X-Requested-With");
    config.addExposedHeader("accept");
    config.addExposedHeader("Origin");
    config.addExposedHeader("Access-Control-Request-Method");
    config.addExposedHeader("Access-Control-Request-Headers");
    config.addExposedHeader(Constants.USER_TOKEN_STRING);

    //2.添加映射路径
    UrlBasedCorsConfigurationSource cOnfigSource= new UrlBasedCorsConfigurationSource();
    configSource.registerCorsConfiguration("/**", config);

    //3.返回新的 CorsFilter.
    return new CorsFilter(configSource);
    }
    、、、
    CodeJr
        12
    CodeJr  
       Feb 29, 2020
    Constants.USER_TOKEN_STRING 是我 token 验证定义的允许通行的请求头
    CodeJr
        13
    CodeJr  
       Feb 29, 2020
    实在不行 可以用 spring 的 @CrossOrigin 进行部分跨域
    xrr2016
        14
    xrr2016  
       Feb 29, 2020
    跨域请求带 cookie 后端请求 Origin 不能设置为通配符 * , 需要设置指定域名和端口
    ChunkitAu
        15
    ChunkitAu  
    OP
       Feb 29, 2020
    @xrr2016 设置过请求的地址了 没用
    xDaShen
        16
    xDaShen  
       Feb 29, 2020
    我一般会加个网关,就不存在跨域的问题了
    ChunkitAu
        17
    ChunkitAu  
    OP
       Feb 29, 2020
    解决了 全部配置没有问题
    我分了两个主包 A 和 B
    启动类放在 B 包下 SpringBootApplication 没加载我跨域配置类
    放在 A 和 B 包同一层结构 跨域成功
    hantsy
        18
    hantsy  
       Feb 29, 2020
    Spring 为什么会配置这么麻烦,。。。不明白。

    registry.addMapping("/**")一行代码就可以全局启用 Cors。

    java
    @Configuration
    @EnableWebMvc// Spring Boot 中删除掉这一行
    public class WebConfig extends WebMvcConfigurerAdapter {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/**");
    }
    }
    About     Help     Advertise     Blog     API     FAQ     Solana     5789 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 235ms UTC 07:35 PVG 15:35 LAX 00:35 JFK 03:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86