首页 > 编程知识 正文

浏览器跨域问题怎么解决,跨域访问是什么意思

时间:2023-05-06 18:59:43 阅读:33185 作者:52

如果存在域间问题* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *。

方案addCorsMappings方法/** *域间配置* */@ configurationpublicclasscorscorsconfigimplementswebmvcconfigurer { @ overridepublicvoidaddcorsmappings (corsregistryry registry ) ) 使用allowedorigins )、allowcredentials )、true )、allowedmethods )和' poowet' }方案CorsFilter过滤器使用addCorsMappings方法

但是,如果以这种方式进行配置,然后使用自定义阻止程序,则会禁用域之间的关联配置。

原因是请求经过的优先级问题,因为请求到达时将进入拦截器而不是映射,所以在返回的报头信息中有未配置的域间信息。 浏览器报告域之间的异常。

使用CORS过滤器可以正确解决域间问题。 代码如下。

@ configurationpublicclasscorscorsconfigimplementswebmvcconfigurer { @ overridepublicvoidaddcorsmappings (corsregistryry registry ) ) ').allowedorigins ) (* ' ).allow credentials (true ).allowedheaders ) (* ' ) allowedheaders () ) ) }隐私保护*要求三种常用配置。 *意味着允许一切。 到时候你还可以定制属性。 */CORS configuration.addallowedorigin (' * '; CORS configuration.addallowedheader (' * '; CORS configuration.addallowedmethod (' * '; CORS配置. setallowcredentials (true; CORS configuration.set maxage (3600 l; 返回核心配置; } @ beanpubliccorsfiltercorsfilter () urlbasedcorsconfigurationsourcesource=newurlbasedcorsconfigurationsource ); source.registercorsconfiguration ('/* * ',corsConfig ) ); returnnewCorsfilter(source; }参考:

[心得]SpringBoot使用addCorsMappings构成域间的坑_yookoo - SegmentFault否

【SpringMVC】与权限拦截器冲突导致的Cors域间设置失效问题_MO后端奇妙之旅- SegmentFault否

解决spring boot跨web域访问问题-addcorsmappings和CorsFilter_c5113620博客-CSDN博客

方案:前端选项请求问题1 :选项请求选项请求方法有两个主要用途。

1、获取服务器支持的HTTP请求方法

2、为了检查服务器的性能。 例如,在AJAX发出跨域请求的印前检查中,必须向另一个域名资源发送http选项请求标头,以确定实际发送的请求是否安全。

这是浏览器给我装的,后端什么都没做。

问题2 )为什么会使用选项请求,必须从浏览器的同源政策和域之间开始。 具体来说,也可以阅读一下同源政策和域间问题以及浏览器的同源政策及其避免方法。 这里不说明。

虽然解决域间问题的方法有很多,但是CORS是比较好的解决方案,我们的项目也使用了这个模型。 此模型有“印前检查”请求,也就是常规请求之前的选项请求。

/**针对前端选项请求,访问控制请求方法, 必须保持访问控制-请求头*和访问控制-全局*/publicclasscorsfilterimplementsfilter { publiccorsfilter } { } @ overridepublicvoiddilter servlet response RES,filterchainchaion servlet exception (httpservletrequestrequest=(httpservletrequestrequest ) ) ) http servl http servlet响应=响应String method=request.getMethod (; stringaccesscontrolrequestmethod=request.get header (访问控制请求方法); stringaccesscontrolrequestheaders=request.get header (访问控制请求头); response.setheader (' access -控制- allow-origin ',' * '; response.setheader (访问控制- allow-methods ),访问控制requestmethod ); response.setheader (' access -控制- max-age ',' 3600 ' ); response.setheader (' access-control-allow-credentials ',' true ' ); response.setheader (访问控制- allow-headers ),访问控制requestheaders ); if(options ).equals(method ) ) response.set status (http status.ok.value ) ); }else{chain.dofilter(req,res ); } @ overridepublicvoiddestroy (} @ overridepublicvoidinit (filterconfigfilterconfig ) Throwsservletexception )/* ) ) ) ) ) ) ) ) ) @ conditionalonproperty (value=(tkp.CORS.enable )、havingValue='true ' ) @ configurationpublicclasscorsautoconfigurationimplementswebmvcconfigurer { publiccorsautoconfiguration } @ overridepublicvoidaddcorsmappings (corsregistryregistry ) registry.addmapping )、allowedorigins )、newstrining } @ beanpublicfilterregistrationbeancorswebfilter ((filterregistrationbean=newfilterregistrationbean filter ) chertypes(dispatchertype.async,newdispatchertype [ ] { dispatcher type.error,dispatcher type.error }过滤器返回过滤器注册bean; }参考:

3359 cloud.Tencent.com/developer/article/1046663

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。