Java后端带参跨域访问_java后端解决请求跨域

跨域

跨域:指的是浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制。

例如:a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源。注意:跨域限制访问,其实是浏览器的限制。

同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域

解决方式:

服务端设置Response Header(响应头部)的Access-Control-Allow-Origin

在需要跨域访问的类和方法中设置允许跨域访问(如Spring中使用@CrossOrigin注解);

继承使用Spring Web的CorsFilter(适用于Spring MVC、Spring Boot)

实现WebMvcConfigurer接口(适用于Spring Boot)

使用Filter方式进行设置

使用Filter过滤器来过滤服务请求,向请求端设置Response Header(响应头部)的Access-Control-Allow-Origin属性声明允许跨域访问。

@WebFilter

public class CorsFilter implements Filter {

@Override

public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {

HttpServletResponse response = (HttpServletResponse) res;

response.setHeader("Access-Control-Allow-Origin", "*");

response.setHeader("Access-Control-Allow-Methods", "*");

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

response.setHeader("Access-Control-Allow-Headers", "*");

response.setHeader("Access-Control-Allow-Credentials", "true");

chain.doFilter(req, res);

}

}

继承 HandlerInterceptorAdapter

@Component

public class CrossInterceptor extends HandlerInterceptorAdapter {

@Override

public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

response.setHeader("Access-Control-Allow-Origin", "*");

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

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

response.setHeader("Access-Control-Allow-Headers", "*");

response.setHeader("Access-Control-Allow-Credentials", "true");

return true;

}

}

实现 WebMvcConfigurer

@Configuration

@SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")

public class AppConfig implements WebMvcConfigurer {

@Override

public void addCorsMappings(CorsRegistry registry) {

registry.addMapping("/**") // 拦截所有的请求

.allowedOrigins("http://www.abc.com") // 可跨域的域名,可以为 *

.allowCredentials(true)

.allowedMethods("*") // 允许跨域的方法,可以单独配置

.allowedHeaders("*"); // 允许跨域的请求头,可以单独配置

}

/**

* 页面跨域访问Controller过滤

*

* @return

*/

@Override

public void addCorsMappings(CorsRegistry registry) {

WebMvcConfigurer.super.addCorsMappings(registry);

registry.addMapping("/**")

.allowedHeaders("*")

.allowedMethods("Get", "HEAD", "POST", "PUT", "DELECT","OPTIONS")

.allowedOrigins("*");

}

}

使用@CrossOrigin注解

如果只是想部分接口跨域,且不想使用配置来管理的话,可以使用这种方式

在Controller使用

@CrossOrigin

@RestController

@RequestMapping("/user")

public class UserController {

@GetMapping("/{id}")

public User get(@PathVariable Long id) {

}

@DeleteMapping("/{id}")

public void remove(@PathVariable Long id) {

}

}

在具体接口上使用

@RestController

@RequestMapping("/user")

public class UserController {

@CrossOrigin

@GetMapping("/{id}")

public User get(@PathVariable Long id) {

}

@DeleteMapping("/{id}")

public void remove(@PathVariable Long id) {

}

}

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

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

相关文章

系统输入输入出设计相关知识介绍

1、输出设计输出设计主要包括:确定输出内容、选择输出设备与介质、确定输出格式三个方面的内容。确定输出内容:输出内容的设计首先要确定用户在使用信息方面的需求,然后设计输出信息的内容,包信息形式(括文字、图形、表…

计算机知识:电脑系统盘文件夹详解

今天给大家介绍一下电脑系统盘(C盘)的相关知识。C盘变红,是存储空间告急。C盘里通常都是安装的系统文件,一般情况下不放其他文件,如果放了可以转移到其他盘里去。还有一个就是电脑桌面,通常也是属于C盘空间…

python json dumps utf8_Python2操作JSON出现乱码的解决方案

其实刚刚写过一整篇Python编码问题的解决方案,由于JSON又是一种特殊案例(与库相关,与语言本身无关)所以就单独提出来说。我们来看一个从网上获取json并又存到本地文件的例子import requests,jsonr requests.get(https://api.github.com/repos/solomonxi…

【代码笔记】iOS-字体抖动动画

一,效果图。 二,代码。 ViewController.m #import "ViewController.h"interface ViewController ()endimplementation ViewController- (void)viewDidLoad {[super viewDidLoad];// Do any additional setup after loading the view, typicall…

java for循环如何优化_java for循环及其优化

for循环1.首先知道,for循环的3个表达式的意思:表达式1: 一般为赋值表达式,给控制变量赋初值;表达式2: 关系表达式或逻辑表达式,循环控制条件;表达式3: 一般为赋值表达式&…

ElementUI+VUE 日期控件禁用用法

今天给大家整理一下ElementUIVUE 日期控件禁用用法&#xff0c;希望对大家有所帮助&#xff01;HTML文件<el-date-pickerv-model"value"type"date":editable"false"placeholder"开始日期"value-format"yyyy-MM-dd":picke…

利用rfcomm实现树莓派与手机通信_工业物联网 | 怎么用NodeRed实现树莓派与阿里云物联网平台通信?虹科告诉你!...

想获取更多IIOT干货请点击蓝字&#xff0c;关注我们虹科工业树莓派高性能多接口宽温--适应恶劣环境★★★★★Node-RED是构建物联网(IoT)应用程序的强大工具&#xff0c;它使用可视化的编程方法&#xff0c;允许开发人员将预定义的代码块(称为“节点”)连接在一起以执行任务。当…

关于“using namespace std”

http://www.cnblogs.com/uniqueliu/archive/2011/07/10/2102238.html转载于:https://www.cnblogs.com/prayer521/p/5762948.html

mysql的mtr是指什么_MySQL中MTR的概念

MTR全称是Mini-Transaction&#xff0c;顾名思义&#xff0c;可以理解为"最小的事务"&#xff0c;MySQL中把对底层页面的一次原子访问的过程称之为一个Mini-Transaction&#xff0c;这里的原子操作&#xff0c;指的是要么全部成功&#xff0c;要么全部失败&#xff0…

前端:Element UI 多选框组用法笔记

今天给大家分享一下Element UI 多选框组用法笔记&#xff0c;直接上代码&#xff01;<html><head></head><body><el-form> <el-form-item label"兴趣爱好:"> <el-checkbox-group v-model"form.checkList"> <…

xiaocms 关于搜索功能 添加搜索字段

自己折磨了好几天 就是没研究个出像样的的东西 看了一下 core/controller/index.php searchAction()方法 但是不知从何下手。查了sql语句&#xff0c;还是没实现 请教了一位自学php的小弟 &#xff0c;人家三下五除二的功夫就做出来了 解决的思路是一样的&#xff0c;可我就是…

python编程第四版_清华编程教授强力推荐《Python编程》,指导你如何学习python

Python编程真的那么容易吗&#xff1f;仅仅是看理论就可以学以致用吗&#xff1f;今天我给你介绍的这本书&#xff0c;也许会让你开始改变这种想法&#xff0c;因为这本书上的练习和案例以及指导本身就足够学好Python了。清华编程教授强力推荐《Python编程》&#xff0c;指导你…

java 构造 statict_java学习:构造方法、static、final

在了解了java的基本数据结构后&#xff0c;开始学习java的类。java中的类也是一种数据结构&#xff0c;我认为它和C中的结构体挺像。类中可以有属性和方法。类的方法中比较特别的是构造方法。java中类的构造方法要和类名相同&#xff0c;且没有返回值。构造方法主要用于为类的对…

微信终于可以发送大文件了!

来源丨扩展迷EXTFANS&#xff08;ID&#xff1a;infinitydaily&#xff09;https://mp.weixin.qq.com/s/EAwYnq7435oMQnz6JqkHYg微信作为一款国民级的通讯软件&#xff0c;虽然用户基数庞大&#xff0c;但在用户体验方面一直饱受诟病&#xff0c;尤其是在部分功能方面&#xff…

Iterable 超级接口

这是一个老祖宗,一代一代往下拨 collection 的方法如下,是一个跟接口方法如下,见API collection : add():添加一个元素     addAll():添加一组元素 clear();清空     remove(Object o) &#xff1a;移除     removeAll():移除一组元素     isEmpty();判断集合…

pc寄存器or程序计数器

一&#xff1a;PC寄存器解释 二&#xff1a;PC寄存器的作用

项目设计基础:处理过程设计相关知识介绍​

处理过程设计关键是用一种适当的表示形式来描述每个模块执行过程。常用的表示形式有图形、语言、表格。比如传统的框图、判定表等。1、程序流程图&#xff08;Program Flow Chart&#xff09;程序流程图也成为程序框图&#xff0c;是最早、流行最广泛的一种图形表示方法。程序流…

关于JS中的定时器!!!

定时器: 周期性定时器 一次性定时器 1. 周期性定时器: 让程序每隔一段时间间隔&#xff0c;反复执行一项任务 何时使用: 只要连续&#xff0c;有规律的持续播放的动画 如何使用: 3件事&#xff1a; 1. ***任务函数: 定时器每次执行的任务 function task(){...} 任务函数通常要…

python 更新数据库历史_python 实现数据库中数据添加、查询与更新的示例代码

一、前言最近做web网站的测试&#xff0c;遇到很多需要批量造数据的功能&#xff1b;比如某个页面展示数据条数需要达到10000条进行测试&#xff0c;此时手动构造数据肯定是不可能的&#xff0c;此时只能通过python脚本进行自动构造数据&#xff1b;本次构造数据主要涉及到在某…