电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

Java 跨域問題的處理方式

瀏覽:85日期:2022-08-20 18:47:18

問題

在頁面上要使用 Ajax 請求去獲取另外一個服務的數據,由于瀏覽器的 同源策略,所以直接請求會得到一個 Error。

Failed to load https://www.baidu.com/: No ’Access-Control-Allow-Origin’ header is present on the requested resource. Origin ’http://localhost:3000’ is therefore not allowed access. If an opaque response serves your needs, set the request’s mode to ’no-cors’ to fetch the resource with CORS disabled.

大概就是這樣的一個錯誤,關鍵詞是 Access-Control-Allow-Origin,一般出現這個都是跨域問題。

解決方案

解決跨域問題的方式有很多,但這里之說 Cors 的方案。

在后臺添加一個 Filter 過濾器

/** * 使用自定義的 Filter 攔截器實現跨域請求、 * 適用于所有的 Java Web 項目并且不局限于某個框架 * 注:此處的 @Component 僅為讓 Spring 知道這個 Bean, 不然攔截器不會加載 * * @author rxliuli */public class CustomCorsFilterConfig implements Filter { @Override public void init(FilterConfig filterConfig) { } @Override public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { //允許所有來源 String allowOrigin = '*'; //允許以下請求方法 String allowMethods = 'GET,POST,PUT,DELETE,OPTIONS'; //允許以下請求頭 String allowHeaders = 'Content-Type,X-Token,Authorization'; //允許有認證信息(cookie) String allowCredentials = 'true'; String origin = request.getHeader('Origin'); //此處是為了兼容需要認證信息(cookie)的時候不能設置為 * 的問題 response.setHeader('Access-Control-Allow-Origin', origin == null ? allowOrigin : origin); response.setHeader('Access-Control-Allow-Methods', allowMethods); response.setHeader('Access-Control-Allow-Credentials', allowCredentials); response.setHeader('Access-Control-Allow-Headers', allowHeaders); //處理 OPTIONS 的請求 if ('OPTIONS'.equals(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); return; } filterChain.doFilter(request, response); } @Override public void destroy() { }}

在 web.xml 文件中添加攔截器配置(注:如果可能就配置成第一個 Filter)

<!--cors 跨域訪問--><filter> <filter-name>customCorsFilterConfig</filter-name> <filter-class>CustomCorsFilterConfig</filter-class></filter><filter-mapping> <filter-name>customCorsFilterConfig</filter-name> <url-pattern>/*</url-pattern></filter-mapping>

Spring Web 的解決方案

配置一個每次請求都過濾一次的 Filter 就好了

@Configurationpublic class CorsConfig { @Bean public OncePerRequestFilter corsFilter() { return new OncePerRequestFilter() { @Override protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException {//允許所有來源String allowOrigin = '*';//允許以下請求方法String allowMethods = 'GET,POST,PUT,DELETE,OPTIONS';//允許以下請求頭String allowHeaders = 'Content-Type,X-Token,Authorization';//允許有認證信息(cookie)String allowCredentials = 'true';String origin = request.getHeader('Origin');//此處是為了兼容需要認證信息(cookie)的時候不能設置為 * 的問題response.setHeader('Access-Control-Allow-Origin', origin == null ? allowOrigin : origin);response.setHeader('Access-Control-Allow-Methods', allowMethods);response.setHeader('Access-Control-Allow-Credentials', allowCredentials);response.setHeader('Access-Control-Allow-Headers', allowHeaders);//處理 OPTIONS 的請求if ('OPTIONS'.equals(request.getMethod())) { response.setStatus(HttpServletResponse.SC_OK); return;}filterChain.doFilter(request, response); } }; }}

使用示例

下面是一些簡單的使用 fetch 進行跨域請求的示例:

簡單 fetch 請求,和正常使用 fetch 并無區別

fetch(url) .then(res => res.json()) .then(json => console.log(json)) 表單請求

var fd = new FormData()fd.append(’username’, ’rx’)fd.append(’password’, ’rx’)fetch(url, { method: ’POST’, body: fd,}) .then(res => res.json()) .then(json => console.log(json)) 需要認證的請求

fetch(url, { /** * 關鍵就在這里,代表用戶是否應該在跨域的情況下發送 cookies 和 HTTP Basic authentication 等驗信息以及服務端能否返回 Set-Cookie(服務端 Session 需要使用這個向 cookie 中設置 sessionId)。 * 包含三個可選值:omit(從不發送), same-origin(同源才發送), include(總會發送) * 參考鏈接:<https://developer.mozilla.org/zh-CN/docs/Web/API/Request/credentials> */ credentials: ’include’,}) .then(res => res.json()) .then(json => console.log(json))

注:如果想要服務端返回 Set-Cookie(SessionId 也需要通過這個響應屬性去設置) 就必須設置這個請求參數!

那么,之后在前端跨域請求的時候就可以愉快地玩耍啦(v^_^)v

以上就是Java 跨域問題的處理方式的詳細內容,更多關于Java 跨域的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
主站蜘蛛池模板: 小型气象站_便携式自动气象站_校园气象站-竞道气象设备网 | COD分析仪|氨氮分析仪|总磷分析仪|总氮分析仪-圣湖Greatlake | 杭州火蝠电商_京东代运营_拼多多全托管代运营【天猫代运营】 | 沧州友城管业有限公司-内外涂塑钢管-大口径螺旋钢管-涂塑螺旋管-保温钢管生产厂家 | 英思科GTD-3000EX(美国英思科气体检测仪MX4MX6)百科-北京嘉华众信科技有限公司 | 送料机_高速冲床送料机_NC伺服滚轮送料机厂家-东莞市久谐自动化设备有限公司 | 冷凝水循环试验箱-冷凝水试验箱-可编程高低温试验箱厂家-上海巨为(www.juweigroup.com) | 皮带式输送机械|链板式输送机|不锈钢输送机|网带输送机械设备——青岛鸿儒机械有限公司 | 耐高温风管_耐高温软管_食品级软管_吸尘管_钢丝软管_卫生级软管_塑料波纹管-东莞市鑫翔宇软管有限公司 | 通风气楼_通风天窗_屋顶风机-山东美创通风设备有限公司 | 高低温万能试验机_拉力试验机_拉伸试验机-馥勒仪器科技(上海)有限公司 | 隔离变压器-伺服变压器--输入输出电抗器-深圳市德而沃电气有限公司 | 盘古网络技术有限公司| 成都思迪机电技术研究所-四川成都思迪编码器 | 谈股票-今日股票行情走势分析-牛股推荐排行榜 | 数控专用机床,专用机床,自动线,组合机床,动力头,自动化加工生产线,江苏海鑫机床有限公司 | 蒸汽热收缩机_蒸汽发生器_塑封机_包膜机_封切收缩机_热收缩包装机_真空机_全自动打包机_捆扎机_封箱机-东莞市中堡智能科技有限公司 | 量子管通环-自清洗过滤器-全自动反冲洗过滤器-北京罗伦过滤技术集团有限公司 | 机械立体车库租赁_立体停车设备出租_智能停车场厂家_春华起重 | 微波消解仪器_智能微波消解仪报价_高压微波消解仪厂家_那艾 | 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 德州网站制作 - 网站建设设计 - seo排名优化 -「两山建站」 | 正压密封性测试仪-静态发色仪-导丝头柔软性测试仪-济南恒品机电技术有限公司 | 学叉车培训|叉车证报名|叉车查询|叉车证怎么考-工程机械培训网 | 全自动过滤器_反冲洗过滤器_自清洗过滤器_量子除垢环_量子环除垢_量子除垢 - 安士睿(北京)过滤设备有限公司 | LHH药品稳定性试验箱-BPS系列恒温恒湿箱-意大利超低温冰箱-上海一恒科学仪器有限公司 | 没斑啦-专业的祛斑美白嫩肤知识网站-去斑经验分享 | 电镀电源整流器_高频电解电源_单脉双脉冲电源 - 东阳市旭东电子科技 | 泥浆在线密度计厂家-防爆数字压力表-膜盒-远传压力表厂家-江苏大亚自控设备有限公司 | 电缆接头_防水接头_电缆防水接头 - 乐清市新豪电气有限公司 | 托利多电子平台秤-高精度接线盒-托利多高精度电子秤|百科 | 存包柜厂家_电子存包柜_超市存包柜_超市电子存包柜_自动存包柜-洛阳中星 | 论文查重_免费论文查重_知网学术不端论文查重检测系统入口_论文查重软件 | 高防护蠕动泵-多通道灌装系统-高防护蠕动泵-www.bjhuiyufluid.com慧宇伟业(北京)流体设备有限公司 | 南京办公用品网-办公文具用品批发-打印机耗材采购 | PCB接线端子_栅板式端子_线路板连接器_端子排生产厂家-置恒电气 喷码机,激光喷码打码机,鸡蛋打码机,手持打码机,自动喷码机,一物一码防伪溯源-恒欣瑞达有限公司 假肢-假肢价格-假肢厂家-河南假肢-郑州市力康假肢矫形器有限公司 | 企业彩铃制作_移动、联通、电信集团彩铃上传开通_彩铃定制_商务彩铃管理平台-集团彩铃网 | 14米地磅厂家价价格,150吨地磅厂家价格-百科 | 合肥角钢_合肥槽钢_安徽镀锌管厂家-昆瑟商贸有限公司 | 舞台木地板厂家_体育运动木地板_室内篮球馆木地板_实木运动地板厂家_欧氏篮球地板推荐 | 旗帜网络笔记-免费领取《旗帜网络笔记》电子书 |