SpringBoot跨域Access-Control-Allow-Origin实现解析
作者:慕尘 发布时间:2023-11-28 23:04:34
标签:spring,boot,跨域,access,control,allow,origin
这篇文章主要介绍了SpringBoot跨域Access-Control-Allow-Origin实现解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
跨域(CORS)是指不同域名之间相互访问。
跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略所造成的,是浏览器对于JavaScript所定义的安全限制策略。
只要协议,子域名,主域名,端口号有一项不同,就属于跨域
跨域的解决方法
前端:
使用jsonp
后端:
实现WebMvcConfigurer接口
在需要跨域访问的类和方法中设置允许跨域访问(注解)
服务端设置Response Header(Fiter)
(1)实现WebMvcConfigurer接口
通过实现WebMvcConfigurer接口中的addCorsMappings()方法来实现跨域
@Configuration
public class WebMvcConfig implements WebMvcConfigurer{
//解决跨域问题
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("*")
.allowCredentials(true)
.allowedMethods("GET", "POST", "DELETE", "PUT")
.maxAge(3600);
}
}
(2)注解
使用@CrossOrigin注解声明类和方法允许跨域访问
该注解可以实现方法级别的细粒度的跨域控制。可以在类或者方添加该注解。
如果在类上添加该注解,该类下的所有接口都可以通过跨域访问;
如果在方法上添加注解,那么只限于加注解的方法可以访问。
@CrossOrigin
@RestController
@RequestMapping("/api/ppt")
public class PPTOperation {
@PostMapping("/combine")
public Result combine(@RequestBody JSONObject jsonParam) {
……
}
}
(3)实现Fiter接口
通过实现Fiter接口在请求中添加一些Header来解决跨域的问题
@Component
public class CorsFilter implements Filter {
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletResponse res = (HttpServletResponse) response;
res.addHeader("Access-Control-Allow-Credentials", "true");
res.addHeader("Access-Control-Allow-Origin", "*");
res.addHeader("Access-Control-Allow-Methods", "GET, POST, DELETE, PUT");
res.addHeader("Access-Control-Allow-Headers", "Content-Type,X-CAF-Authorization-Token,sessionToken,X-TOKEN");
if (((HttpServletRequest) request).getMethod().equals("OPTIONS")) {
response.getWriter().println("ok");
return;
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
}
来源:https://www.cnblogs.com/baby123/p/10837026.html


猜你喜欢
- 前言一般数据库的表结构都会有update_time,修改时间,因为这个字段基本与业务没有太大关联,因此开发过程中经常会忘记设置这两个字段的值
- 本文实例为大家分享了java实现简单扫雷游戏的具体代码,供大家参考,具体内容如下package com.test.swing;import
- 1 pom.xml文件注:热部署功能spring-boot-1.3开始有的<!--添加依赖--><dependency&g
- 一、什么是状态模式定义:当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。主要解决:当控制一个对象状态的条件表达式过于
- 前言此文适合了解了es相关概念以及基础知识的同学阅读elasticsearch简介Elasticsearch是一个基于Lucene的搜索服务
- 题目:将一个数组逆序输出。代码:import java.util.*;public class lianxi31 {public stati
- 刚开始我以为熔断和降级是一体的,以为他们必须配合使用; 只不过名字不一样而已,但是当我经过思考过后,发现他们其实不是一个东西;降级什么是服务
- 本文实例讲述了Java创建ZIP压缩文件的方法。分享给大家供大家参考。具体如下:这里注意:建议使用org.apache.tools.zip.
- Android横竖屏要解决的问题应该就两个:一。布局问题;二。重新载入问题。1.布局问题:如果不想让软件在横竖屏之间切换,最简单的办法就是在
- Spring spring-context-indexer依赖<dependencies> <d
- 前言序列化想必大家都很熟悉了,对象在进行网络传输过程中,需要序列化之后才能传输到客户端,或者客户端的数据序列化之后送达到服务端序列化的标准解
- 项目结构项目路径可以自己定义,只要路径映射正确就可以pom.xml <properties> <spring.versio
- 将自然语言编写的测试用例转换为可执行的测试,可以大大降低需求与开发之间的沟通成本,这是BDD(行为驱动开发)希望达到的效果。SpecFlow
- springboot中集成jpa需要再pom文件中添加jpa的jar包,使用springboot的话iju不用自己规定版本号了,自动管理依赖
- 重写(Override)重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在
- 目录前言正文自定义NameSpaceHandler自定义schemaParserDecorator总结前言在早期基于Xml配置的Spring
- 本文实例为大家分享了android surfaceView实现播放视频的具体代码,供大家参考,具体内容如下RelativeLayout<
- Task执行任务,等待任务完成代码://任务Func<int> Funcs = () =>{? ? Console.Wri
- 本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下一、前言我们学了这么久的知识了,光学知识不会用是一件很悲伤
- Android中的异步消息机制分为四个部分:Message、Handler、MessageQueue和Looper。其中,Message是线