ajax跨域请求(cors实现),ajax跨域请求(CORS实现)

场景:目前有项目A(基于servlet的WEB项目),和项目B(基于spring boot的WEB项目),使用同一CAS提供单点登陆,如今须要两个项目互相调用接口数据,因此涉及到ajax的跨域请求java

调研:通过调研发现目前的ajax跨域解决方案有两种,jsonp和cors,其中jsonp须要在返回值中携带回调函数,cors则须要在响应头中附加指定参数。比对实现方式和优劣点,决定使用cors来实现web

CORS原理:服务器在收到请求以后,在响应参数中加入,Access-Control-Allow-Origin,Access-Control-Allow-Methods,Access-Control-Max-Age,Access-Control-Allow-Headers,Access-Control-Allow-Credentials等参数,浏览器在接收到返回值后会经过这些参数的设置来判断服务器是否支持跨域请求。因此,使用cors的方法就是经过设置过滤器,在指定请求的响应头中添加参数便可,传统的WEB项目,须要在web.xml中设置,而spring boot项目能够经过注解来设置ajax

1,servlet的WEB项目实现CORSspring

服务器端新建过滤器类json

package com.tas.util;

import java.io.IOException;

import javax.servlet.Filter;

import javax.servlet.FilterChain;

import javax.servlet.FilterConfig;

import javax.servlet.ServletException;

import javax.servlet.ServletRequest;

import javax.servlet.ServletResponse;

import javax.servlet.http.HttpServletResponse;

/**

* 跨域支持

*/

public class SimpleCORSFilter implements Filter {

@Override

public void destroy() {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

HttpServletResponse httpServletResponse = (HttpServletResponse) response;

httpServletResponse.setHeader("Access-Control-Allow-Origin", "http://localhost");

httpServletResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");

httpServletResponse.setHeader("Access-Control-Max-Age", "3600");

httpServletResponse.setHeader("Access-Control-Allow-Headers", "x-requested-with");

// 是否支持cookie跨域

httpServletResponse.addHeader("Access-Control-Allow-Credentials", "true");

chain.doFilter(request, response);

}

@Override

public void init(FilterConfig arg0) throws ServletException {

// TODO Auto-generated method stub

}

}

在web.xml中配置过滤器,注意过滤器要配置在sevrlet和cas的过滤器以前跨域

Simple CORSFilter

com.tas.util.SimpleCORSFilter

Simple CORSFilter

/*

这样的配置就完成了,须要注意的是,在须要跨域访问该项目的网页中,若是须要传递cookie,则要在ajax中打开withCredentials,以下浏览器

$.ajax({

url:"http://localhost:8080/tasociety/IndexController.crossdomainTest.do",

type: "get",

dataType:"json",

xhrFields: {

withCredentials: true

},

crossDomain: true,

success:function (data) {

alert("12345");

console.log(data);

}

})

2,spring boot 的WEB项目实现CORS服务器

由于有默认的注解@CrossOrigin,因此直接配置在controller上就行了cookie

package com.castmember.Controller;

@CrossOrigin(origins = "http://localhost:8080",allowCredentials = "true")

@Controller

public class IndexController {

@Autowired

SysUserDao sysuserdao;

@RequestMapping("/")

public String index(Model model) {

Optional useropt= sysuserdao.findById((long)1);

model.addAttribute("user", useropt.orElse(null));

return "index";

}

}

在须要跨域访问该项目的网页中,若是须要传递cookie,则要在ajax中打开withCredentials,以下app

$.ajax({

url:"http://localhost/castmember/crossdomaindata",

type: "get",

dataType:"json",

xhrFields: {

withCredentials: true

},

crossDomain: true,

success:function (data) {

alert("12345");

console.log(data);

}

})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359093.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

百度贴吧排名计算方式

排名模拟公式:历史帖子数a+新增帖子数b+∑(单一帖子浏览量该帖回复总数)c+独立ip数d=总人气值 其中,a、b、c、d为系数,如果系数为1,则1;(单一帖子浏览量该帖回复总数)这个比率只有在百度认可的一个范围,譬如说5-8之间才能得到加分,有些贴吧每日新增的帖子数表面…

转-Android Studio *.jar 与 *.aar 的生成与*.aar导入项目方法

主要讲解Android Studio中生成aar文件以及本地方式使用aar文件的方法。 在Android Studio中对一个自己库进行生成操作时将会同时生成*.jar与*.aar文件。 分别存储位置: *.jar:库/build/intermediates/bundles/debug(release)/classes.jar *.aar&#xff…

sprutcam 多机器人_Sprutcam工业机器人离线编程系统

SprutCAM机器人离线编程软件简介1.软件基于Windows风格,中文界面,易学易用,很快可以上手并投入实际工作。2.SprutCAM是一个能独立工作的系统,并非插件,不需要依托任何其他的软件即可独立运行。3.SprutCAM能对6轴工业机器人进行编程…

手机 服务器 推送消息推送消息,推送信息到手机的pushover使用方法及sample code

今天给大家介绍一个好东西,用了两年多了,一直没时间给大家推荐。pushover,移动端的信息推送服务API,包括使用、设置以及API实现。用途在关键节点放上推送(比如用户注册、举报、评论,系统检测等),当节点触发…

【APICloud系列|8】APICloud下载编译包安装,点击图标打不开,提示很抱歉,程序出现异常,即将退出

下载编译包之后,安装在真机上提示很抱歉,程序出现异常,即将退出。进不去这个应用,请问有什么解决办法? 分享一下解决办法:大体分为两个方向: 1.检查新添加的模块。 2.检查config.xml文件(及index.html文件)。 我的问题是这样解决的,下载每个测试包确定出问题的时间…

4阶范德蒙德行列式例题_行列式的性质和计算问题

行列式计算(2) 01 前言 (1)今天我们继续讨论行列式的性质和计算问题。 (2)①第1题: 很多同学在一开始会直接将行列式拆成两个行列式后直接计算, 这是错误的使用了行列式的性质。注意行列式的分拆是“单行单列可拆”, 所以本题如果一直分拆, 应该是2X2X2=8个行列式, 当然此处我们…

HDU 4508

祼的完全背包问题 #include <iostream> #include <cstdio> #include <cstring> #include <algorithm> #define LL __int64 using namespace std;LL dp[100005]; struct Food{int a,b; }fd[105];int main(){int n,m;while(scanf("%d",&n)…

java不想出差_您不想错过的十大Java书籍

java不想出差我们通过阅读书籍并进行实验来学习。 因此&#xff0c;必须选择最佳的可用选项。 在本文中&#xff0c;我想与一些书分享我的经验&#xff0c;以及它们如何帮助您发展成为Java开发人员。 让我们从头开始&#xff0c;对于任何Java学生来说&#xff0c;前三本书都是一…

diff命令两个服务器文件,linux 比较两个文件夹不同 (diff命令, md5列表)

比较文件夹diff&#xff0c;可以直接使用diff命令[root~]# diff -urNa dir1 dir2-a Treat all files as text and compare them line-by-line, even if they do not seem to be text.-N, --new-fileIn directory comparison, if a file is found in only one directory, treat …

各大银行对应的字段(仅做参考)

字符型银行编码银行名称 ICBC_DEBIT 工商银行&#xff08;借记卡&#xff09; ICBC_CREDIT 工商银行&#xff08;信用卡&#xff09; ABC_DEBIT 农业银行&#xff08;借记卡&#xff09; ABC_CREDIT 农业银行&#xff08;信用卡&#xff09; PSBC_CREDIT 邮储银行&…

hive分区用2个字段有何限制_Hive分区表和桶表的使用

我们看官网文档中这个地方我们先创建好数据库&#xff0c;以供练习使用数据库我们创建数据表我们创建分区表&#xff0c;选取的字段不能是表中存在的字段元数据信息Formatted信息那我们加载信息load data local inpath /data/hivetest/dept.txt into table dept_partition part…

Oracle实用技巧

一. ORACLE SQL PLUS 使用技巧: ----①查找重复记录: SELECT DRAWING, DSNOFROM EM5_PIPE_PREFABWHERE ROWID! (SELECT MAX(ROWID) FROM EM5 _PIPE_PREFAB D WHERE EM5_PIPE_PREFAB.DRAWINGD.DRAWING AND EM5_PIPE_PREFAB.DSNOD.DSNO);  -- 和自己连接&#xff0c;查找其最大…

mysql按日、周、月、年分别统计数据

<!-- 按日查询 --> SELECT DATE_FORMAT(created_date,%Y-%m-%d) as time,sum(money) money FROM o_finance_detail where org_id = 1000 GROUP BY time <!-- 按月查询 --> SELECT DATE_FORMAT(created_date,%Y-%m) as time,sum(money) money FROM o_finan…

魔兽三国服务器维护,魔兽三国开服七天技巧

魔兽三国开服七天技巧是9K9K小编星星为大家带来的&#xff0c;开服前七天&#xff0c;是玩家战斗力飙升&#xff0c;最能拉开与别人距离的时候&#xff0c;那么开服七天应该怎么玩呢。开服七天技巧1.抽出第一个英雄&#xff0c;这个看脸哈!通常出的陆逊&#xff0c;步练师&…

使用Docker容器和Java EE进行持续交付

组织需要一种使应用程序交付快速&#xff0c;可预测和安全的方法&#xff0c;而诸如docker之类的容器所提供的敏捷性则可以帮助开发人员实现这一目标。 对于Java EE应用程序&#xff0c;这可以在容器中打包应用程序&#xff0c;应用程序服务器和其他依赖项&#xff0c;这些容器…

MVC小例子

【约定胜于配置】 1. 右键Mode数据层添加新建项&#xff0c;用linq连接数据库 (不要在控制层上直接操控linq&#xff0c;要在数据层新建一个类&#xff0c;来对数据库进行操作) 2. 右键Mode数据层添加类&#xff0c;来完成对数据库的操作.类的名字叫Carda 3. 在Carda类中写对数…

flutter ios打包_Flutter通过BasicMessageChannel与Android iOS 的双向通信

更多文章请查看 flutter从入门 到精通本文章中的完整代码在这里题记&#xff1a;不到最后时刻&#xff0c;千万别轻言放弃&#xff0c;无论结局成功与否&#xff0c;只要你拼博过&#xff0c;尽力过&#xff0c;一切问心无愧。通过 Flutter 来进行移动应用开发&#xff0c;打包…

程序员养家活口接私活必备网站(顺便用技术改变世界)

程序员接私活的原因很多种(挣钱、养家糊口、提升技术等等)。下面整理了一下网站送给最有潜能的你。 提前准备好自己的笔记本和技术呦。 1.码客帮:https://www.make8.com/ 码客帮是一个基于众包的互联网软件技术服务平台,建立项目需求方与技术大牛的连接。帮助需求方快速找到靠…

作为服务器上的操作系统,作为服务器的操作系统

作为服务器的操作系统 内容精选换一换本节介绍如何使用华为云镜像&#xff0c;通过切换镜像部署Windows环境。当您已经购买了弹性云服务器&#xff0c;但想切换成其它类型操作系统&#xff0c;或者想使用镜像重新部署已经预装了其它软件的环境&#xff0c;可以参考本文档的介绍…

B.一个人的旅行 (dijkstra算法)

这题实在太醉了。十分简单的一道最短路径。我也wa了几次。最后发现可能是在循环次数n的设置上溢出了。s[1001]最大就1000。。。注意两点之间不止一个路径。上一题畅通工程就被坑惨了。 下面附题目 B - 一个人的旅行Time Limit:1000MS Memory Limit:32768KB 64bit IO Fo…