SpringMvc 全局 CORS 解决方案 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
haishiwuyuehao
V2EX    问与答

SpringMvc 全局 CORS 解决方案

  •  
  •   haishiwuyuehao 2020-10-26 09:51:05 +08:00 1843 次点击
    这是一个创建于 1892 天前的主题,其中的信息可能已经有所发展或是发生改变。
    @Component public class CORSConfig implements WebMvcConfigurer{ @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") .allowedHeaders("*") .allowedMethods("*") .allowCredentials(true); WebMvcConfigurer.super.addCorsMappings(registry); } } 
    Connection keep-alive Content-Type application/json Date Mon, 26 Oct 2020 01:04:07 GMT Keep-Alive timeout=60 Transfer-Encoding chunked Vary Origin, Access-Control-Request-Method, Access-Control-Request-Headers 

    不再建议大家使用 WebMvcConfigurerAdapter 该类以过时

    CORS: Cross Origin Resouce Shading 跨资源共享,定义了浏览器与服务器如何实现跨源通信.CORS 背后的基本思路就是使用自定义的 HTTP 头部允许浏览器和服务器相互了解,以确实请求火响应应该是成功还是失败。

    对于简单的请求,比如 GET 或 POST 请求,没有自定义头部,而且请求体是 text/plain 类型,在发送请求前,浏览器在发送请求时会有一个额外的头部Origin Origin 头部包含发送请求的源,以便服务器确定是否为其提供响应。

    在发送请求时,浏览器添加的 Origin Origin:http://127.0.0.1:5500 整个请求头 GET /menu/all HTTP/1.1 Host: 127.0.0.1:8080 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:83.0) Gecko/20100101 Firefox/83.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 Referer: http://127.0.0.1:5500/index.html Origin: http://127.0.0.1:5500 Connection: keep-alive Cache-Control: max-age=0 响应头: Access-Control-Allow-Origin: http://127.0.0.1:5500 Access-Control-Allow-Origin 设置该源,表示允许该源访问。Java 代码里设置的 

    CORS 预检请求,除开 POST,GET 请求以外的其它高级请求需要被响应的话.浏览器会先发送一个 OPTIONS 请求,在该请求中设置请求头Access-Control-Allow-Method需要被响应的方法 Access-Control-Allow-Headers需要被响应的请求包含的请求头

    服务器会在响应头中给出支持的信息

    Access-Control-Allow-Origin: 支持的源 Access-Control-Allow-Methods: 支持的请求方法列表 Access-Control-Allow-Headers: 支持的自定义请求头 Access-Control-Allow-Max-Age: 缓存预检查请求的秒数 响应: Access-Control-Allow-Origin: http://127.0.0.1:5500 Access-Control-Allow-Methods: GET, POST, OPTIONS, DELETE, PUT Access-Control-Allow-Headers: origin Access-Control-Allow-Max-Age: 1728000 

    MDN:@https://developer.mozilla.org/zh-CN/docs/Glossary/Preflight_request

    10 条回复    2020-10-26 13:54:26 +08:00
    wanacry
        1
    wanacry  
       2020-10-26 09:55:12 +08:00
    你在教我做事?
    haishiwuyuehao
        2
    haishiwuyuehao  
    OP
       2020-10-26 09:58:09 +08:00
    @wanacry 星仔,你在教我做事?
    shenlanAZ
        3
    shenlanAZ  
       2020-10-26 10:16:08 +08:00
    你这不是相当于把跨域关掉了么,那你 cookie 安全的解决方案呢?

    还有 WebMvcConfigurerAdapter 过时也要看版本的,至少也要把相应的 spring 版本标出来吧。
    wysnylc
        4
    wysnylc  
       2020-10-26 10:22:06 +08:00
    跨域让运维用 nginx 搞,别在项目里折腾
    jzmws
        5
    jzmws  
       2020-10-26 11:15:59 +08:00
    @wysnylc 用 nginx 搞应该是最合适的一个
    w292614191
        6
    w292614191  
       2020-10-26 11:44:00 +08:00
    CSDN ?
    w292614191
        7
    w292614191  
       2020-10-26 11:45:15 +08:00
    "CORS 预检请求,除开 POST,GET 请求以外的其它高级请求需要被响应的话.浏览器会先发送一个 OPTIONS 请求,"

    我 POST 还是会发送 OPTIONS 请求。

    你测试了吗?
    w292614191
        8
    w292614191  
       2020-10-26 11:46:16 +08:00
    orcusfox
        9
    orcusfox  
       2020-10-26 11:46:49 +08:00 via iPhone
    Spring 这个不太好用,遇到异常标头就没了,安卓有的设备没有 Origin 头,他也不返回标头。ng 比较实在,如果没有 ng,自己写个简单的 interceptor 也好
    Boyce
        10
    Boyce  
       2020-10-26 13:54:26 +08:00
    @w292614191 POST 时 Content-Type 为 application/json 也会发送 OPTIONS 预请求。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1832 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 28m UTC 16:12 PVG 00:12 LAX 08:12 JFK 11:12
    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