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
0
投稿
猜你喜欢
- wait(), notify(), notifyAll()等方法介绍在Object.java中,定义了wait(), notify()和no
- 后端应用经常接收各种信息参数,例如评论,回复等文本内容。除了一些场景下面,可以特定接受的富文本标签和属性之外(如:b,ul,li,h1, h
- 1.首先,八种基本数据类型分别是:int、short、float、double、long、boolean、byte、char; &
- 你是否受够了每次修改静态文件都要重启服务器?有时候在一些公司前后端的职责没有那么的明确,往往后台人员也要去写一些页面,像jsp页面,或者其他
- package com.jjinfo.common.util; import java.util.Arrays; import java.u
- Mybatis 复杂对象resultMap数据对象含有普通属性,一对一对象,一对多对象(2种情况:单一主键和复合主键)下面是resultMa
- 之前文章中我们讲到,java中实现同步的方式是使用synchronized block。在java 5中,Locks被引入了,来提供更加灵活
- 1.引入AOP依赖<dependency>
- controller传boolean形式值@GetMapping("/check-cart")public List&l
- 相比于直线检测,直线拟合的最大特点是将所有数据只拟合出一条直线void fitLine( InputArray points, Output
- ErrorPageFilter的实际应用Spring框架错误页过滤器springboot提供了一个ErrorPageFilter,用来处理当
- 我们使用Jmeter测试同学的网站时,就会出现网站无法访问,403等错误。An error occurred.Sorry, the page
- 本文实例讲述了java实现简单的英文文本单词翻译器功能。分享给大家供大家参考,具体如下:直接上代码:package fanyi;import
- 本文实例为大家分享了java实现微信扫码支付的具体代码,供大家参考,具体内容如下1、maven项目的pom.xml中添加如下jar包:<
- Android的消息机制几乎是面试必问的话题,当然也并不是因为面试,而去学习,更重要的是它在Android的开发中是必不可少的,占着举足轻重
- 1.位置:如下:如果没有则在相同位置新建一个2. 添加端口号,修改:如图server.port=8080启动项目就会发现端口号已经成为你刚才
- CSRF介绍CSRF(Cross-site request forgery),中文名称:跨站请求伪造,也被称为:one click atta
- 本文实例讲述了Java定义泛型方法。分享给大家供大家参考,具体如下:一 点睛1 如果定义类、接口是没有使用类型形参,但定义方法时想自己定义类
- Android植物大战僵尸小游戏全部内容如下:相关下载:Android植物大战僵尸小游戏具体代码如下所示:package com.examp
- 开发环境win10Android Studio效果用于多级菜单展示,或选择。如 每个省,市,县;如 树木的病虫害;关键代码 @overrid