详解SpringMVC解决跨域的两种方案

1. 什么是跨域

跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不同于请求指向资源所在域的HTTP请求。

2. 跨域的应用情景

当使用前后端分离,后端主导的开发方式进行前后端协作开发时,常常有如下情景:

1.后端开发完毕在服务器上进行部署并给前端API文档。

2.前端在本地进行开发并向远程服务器上部署的后端发送请求。

在这种开发过程中,如果前端想要一边开发一边测试接口,就需要使用跨域的方式。

3. 通过注解的方式允许跨域

非常简单,我们可以在Controller类或其方法上加@CrossOrigin注解,来使之支持跨域。

举例:

@CrossOrigin(origins = "*", maxAge = 3600)
@RestController
@RequestMapping("/User")
public class UserController {
}

其中origins为CrossOrigin的默认参数,即跨域来源,*即任何来源,也可以是其他域名。即可以以以下形式:

@CrossOrigin("http://test.com")
@CrossOrigin(origins="http://test.com",maxAge=3600)

该注解用于方法上,写法相同,处理时,SpringMVC会对类上标签和方法上标签进行合并。

4. 通过配置文件的方式允许跨域

在web.xml中添加如下配置:

  <filter-mapping>
    <filter-name>CorsFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

使用这个Filter即可让整个服务器全局允许跨域。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • 详解Spring MVC CORS 跨域

    介绍 跨域CORS,全称是"跨域资源共享"(Cross-origin resource sharing) 当页面发出跨域请求时: 1.简单请求(先简单理解为正常的get/post吧): 浏览器将请求的地址添加到header的Origin里面发送请求.接下来就看后台如何处理了. 2.非简单请求(姑且简单理解成Content-Type:"application/json"吧): 浏览器会先发个预检请求(preflight),也就是OPTIONS请求.服务器返回是否许可访

  • Spring MVC中自带的跨域问题解决方法

    前言 跨域,指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制.本文将详细介绍关于Spring MVC跨域问题解决的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 问题 使用Spring mvc 开发了一个Restful 接口 供前端调用 @PostMapping("/search") public List<Map> search(@RequestBody QueryParams qu

  • spring MVC cors跨域实现源码解析

    名词解释:跨域资源共享(Cross-Origin Resource Sharing) 简单说就是只要协议.IP.http方法任意一个不同就是跨域. spring MVC自4.2开始添加了跨域的支持. 跨域具体的定义请移步mozilla查看 使用案例 spring mvc中跨域使用有3种方式: 在web.xml中配置CorsFilter <filter> <filter-name>cors</filter-name> <filter-class>org.spr

  • Spring MVC 与 CORS跨域的详细介绍

    1. CORS 简介 同源策略(same origin policy)是浏览器安全的基石.在同源策略的限制下,非同源的网站之间不能发送 ajax 请求的. 为了解决这个问题,w3c 提出了跨源资源共享,即 CORS(Cross-Origin Resource Sharing). CORS 做到了两点: 不破坏即有规则 服务器实现了 CORS 接口,就可以跨源通信 基于这两点,CORS 将请求分为两类:简单请求和非简单请求. 1.1 简单请求 可以先看下 CORS 出现前的情况:跨源时能够通过 s

  • 详解SpringMVC解决跨域的两种方案

    1. 什么是跨域 跨域,即跨站HTTP请求(Cross-site HTTP request),指发起请求的资源所在域不同于请求指向资源所在域的HTTP请求. 2. 跨域的应用情景 当使用前后端分离,后端主导的开发方式进行前后端协作开发时,常常有如下情景: 1.后端开发完毕在服务器上进行部署并给前端API文档. 2.前端在本地进行开发并向远程服务器上部署的后端发送请求. 在这种开发过程中,如果前端想要一边开发一边测试接口,就需要使用跨域的方式. 3. 通过注解的方式允许跨域 非常简单,我们可以在C

  • 详解springmvc 接收json对象的两种方式

    最近学习了springmvc 接收json对象的两种方式,现在整理出来,具体如下: 1.以实体类方式接收 前端 ajax 提交数据: function fAddObj() { var obj = {}; obj['objname'] = "obj"; obj['pid'] = 1 ; $.ajax({ url: 'admin/Obj/addObj.do', method: 'post', contentType: 'application/json', // 这句不加出现415错误:U

  • SpringBoot解决跨域的5种方式小结

    什么是跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都限制了跨域访问,也就是不允许跨域请求资源.注意:跨域限制访问,其实是浏览器的限制.理解这一点很重要!!! 同源策略:是指协议,域名,端口都要相同,其中有一个不同都会产生跨域: java解决CORS跨域请求的方式 对于CORS的跨域请求,主

  • 详解matplotlib中pyplot和面向对象两种绘图模式之间的关系

    matplotlib有两种绘图方式,一种是依托matplotlib.pyplot模块实现类似matlab绘图指令的绘图方式,一种是面向对象式绘图,依靠FigureCanvas(画布). Figure (图像). Axes (轴域) 等对象绘图. 这两种方式之间并不是完全独立的,而是通过某种机制进行了联结,pylot绘图模式其实隐式创建了面向对象模式的相关对象,其中的关键是matplotlib._pylab_helpers模块中的单例类Gcf,它的作用是追踪当前活动的画布及图像. 因此,可以说ma

  • java后端解决跨域的几种问题解决

    1.java过滤器过滤 允许整个项目跨域访问,可通过filter来进行过虑: public class SimpleCORSFilter implements Filter{ @Override public void destroy() { } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletExceptio

  • js前端解决跨域的八种实现方案

    由于同源策略的限制,满足同源的脚本才可以获取资源.虽然这样有助于保障网络安全,但另一方面也限制了资源的使用. 那么如何实现跨域呢,以下是实现跨域的一些方法. 一.jsonp跨域 原理:script标签引入js文件不受跨域影响.不仅如此,带src属性的标签都不受同源策略的影响. 正是基于这个特性,我们通过script标签的src属性加载资源,数据放在src属性指向的服务器上,使用json格式. 由于我们无法判断script的src的加载状态,并不知道数据有没有获取完成,所以事先会定义好处理函数.服

  • 最新springboot解决跨域的几种方式小结

    目录 什么是跨域 springboot解决跨域的几种方式 方法一.SpringBoot的注解@CrossOrigin 方式二:使用CorsFilter 方式三:自定义过滤(web  filter)的方式 方式四:实现WebMvcConfigurer中addCorsMappings方法 方法五:采用nginx做动态代理 什么是跨域 跨域:指的是浏览器不能执⾏其他⽹站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制.例如:a页⾯想获取b页⾯资源,如果a.b页⾯的协议

  • spring boot ajax跨域的两种方式

    前言 java语言在多数时,会作为一个后端语言,为前端的php,node.js等提供API接口.前端通过ajax请求去调用java的API服务.今天以node.js为例,介绍两种跨域方式:CrossOrigin和反向代理.  一.准备工作 pom.xml: <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0&quo

  • 详解Nuxt内导航栏的两种实现方式

    方式一 | 通过嵌套路由实现 在pages页面根据nuxt的路由规则,建立页面 1. 创建文件目录及文件 根据规则,如果要创建子路由,子路由的文件夹名字,必须和父路由名字相同 所以,我们的文件夹也为index,index文件夹需要一个默认的页面不然nuxt的路由规则就不能正确匹配页面 一级路由是根路由 二级路由是index,user,默认进入index路由 下面是router页面自动生成的路由 { path: "/", component: _93624e48, children: [

  • 详解Git建立本地仓库的两种方法

    Git是一种分布式版本控制系统,通常这类系统都可以与若干远端代码进行交互.Git项目具有三个主要部分:工作区,暂存目录,暂存区,本地目录: 安装完Git后,要做的第一件事,就是设置用户名和邮件地址.每个Git提交都使用此信息,并且将它永久地烘焙到您开始创建的提交中: $ git config --global user.name "John Doe" $ git config --global user.email johndoe@example.com 之后我们可以建立一个本地仓库.

随机推荐