最近一个接口项目需要支持跨域访问,基于cross实现。于是去spring官网上找了下,发现spring版本4.2+开始支持通过@CrossOrigin注解实现跨域支持。于是把spring版本升级到4.2.6,下面记录踩过的坑。
controller只需要在原先方法上面添加@CrossOrigin注解即可
@Controller
@RequestMapping("demo")
public class DemoController {
@CrossOrigin
@RequestMapping("test")
public void test(ModelMap map ){
map.put("say", "hello world!");
};
}
主要的坑出现在配置文件上,原来的org.springframework.web.servlet.view.ContentNegotiatingViewResolver这个类重写了,导致原来的配置不能使用,新的配置如下
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd
">
<mvc:annotation-driven content-negotiation-manager="contentNegotiationManager"/>
<mvc:resources location="/resources/" mapping="/resources/**" />
<context:component-scan base-package="com.chenxun.demo.*" />
<bean id="contentNegotiationManager"
class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean">
<!-- 开启对/blog/123.json的支持-->
<property name="favorPathExtension" value="true" />
<!-- 关闭 /blog/123?format=json 的支持 -->
<property name="favorParameter" value="false" />
<!-- 自定义约定类型参数名,默认为format -->
<property name="parameterName" value="mediaType" />
<!-- 忽略AcceptHeader -->
<property name="ignoreAcceptHeader" value="true"/>
<!-- 关闭MIME类型解析 -->
<property name="useJaf" value="false"/>
<property name="defaultContentType" value="application/json" />
<property name="mediaTypes">
<map>
<entry key="json" value="application/json" />
<entry key="xml" value="application/xml" />
<entry key="html" value="text/html" />
</map>
</property>
</bean>
<!-- 根据客户端的不同的请求决定不同的view进行响应, 如 /blog/1.json /blog/1.xml -->
<bean
class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
<property name="order" value="1" />
<property name="contentNegotiationManager" ref="contentNegotiationManager"></property>
<property name="viewResolvers">
<list>
<bean class="org.springframework.web.servlet.view.BeanNameViewResolver" />
</list>
</property>
<property name="defaultViews">
<list>
<!-- for application/json -->
<bean
class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
<property name="objectMapper">
<bean class="com.fasterxml.jackson.databind.ObjectMapper">
<property name="dateFormat">
<bean class="java.text.SimpleDateFormat">
<constructor-arg type="java.lang.String" value="yyyy-MM-dd HH:mm:ss" />
</bean>
</property>
</bean>
</property>
</bean>
<!-- for application/xml -->
<bean class="org.springframework.web.servlet.view.xml.MarshallingView">
<property name="marshaller">
<bean class="org.springframework.oxm.xstream.XStreamMarshaller"></bean>
</property>
</bean>
</list>
</property>
</bean>
</beans>
到此可以通过jsonp来跨越请求了,算是个小小的坑吧,记录一下。
分享到:
相关推荐
springboot跨域 springboot解决跨域问题+不同版本springboot解决跨域问题
跨域问题是在开发过程中不可避免的,特别是在前端使用Vue3.x框架结合axios库进行开发时。跨域请求是指前端代码试图从不同的域(协议、域名或端口)访问资源,出于安全原因,浏览器默认禁止这种行为。 在开发环境下...
js + jquery + php跨域问题
在IT行业中,跨域访问是Web开发中一个重要的概念,特别是在使用JavaScript、JSP、JSON以及前端库如jQuery时。本教程将详细讲解如何利用这些技术实现跨域数据交互。 首先,我们需要理解“跨域”这个术语。在浏览器的...
或者,如果服务器支持CORS,可以改为: ```javascript $.ajax({ url: 'http://example.com/weather', type: 'GET', dataType: 'json', crossDomain: true, success: function(data) { // 解析并处理返回的...
2. CORS(Cross-Origin Resource Sharing):是现代浏览器支持的跨域解决方案,服务器通过设置响应头`Access-Control-Allow-Origin`等字段,允许特定的跨域请求。CORS分为简单请求和预检请求(OPTIONS请求),对POST...
在Spring Boot中,我们可以使用`@CrossOrigin`注解或者配置CORS过滤器来启用跨域支持。例如,在全局配置类中: ```java @Configuration public class CorsConfig { @Bean public WebMvcConfigurer ...
Uploadify支持跨域上传,这使得它可以在不同源的Web应用之间安全地传输数据,解决了传统的文件上传因同源策略限制而遇到的问题。 跨域上传的核心在于设置合适的HTTP头部,尤其是`Access-Control-Allow-Origin`头部...
为解决此问题,可以采用CORS(Cross-Origin Resource Sharing,跨源资源共享)策略,通过设置服务器的响应头`Access-Control-Allow-Origin`来允许特定的域名进行跨域访问。 5. **ASP.NET**:本项目使用了ASP.NET...
**Ajax + Servlet 跨域访问 (Jsonp技术)** 在Web开发中,浏览器的同源策略(Same-...尽管现代Web开发中有了CORS(跨源资源共享)等更安全的跨域解决方案,但Jsonp因其简单性和广泛支持,依然在很多场景下被广泛应用。
在利用vuejs开发时,经常会遇到跨域请求数据的问题,本文利用python+flask做后台支撑,记录了在使用axios跨域请求数据时的各种问题,对于此类开发的小伙伴,有一定的借鉴意义。
在生产环境中,跨域问题通常需要通过后端服务器配置 CORS(Cross-Origin Resource Sharing,跨源资源共享)策略来解决。 总结来说,`Vue-cli3.x + axios` 的跨域方案主要依赖于 `devServer.proxy` 配置,它允许...
这个"jwt完整无框架web例子+登录+跨域web demo"是一个基于JWT实现的简单Web应用程序,它包含了登录验证功能,并且支持跨域访问。下面我们将详细探讨JWT、无框架Web开发以及如何在Java中实现登录验证和跨域处理。 1....
介绍koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的Web框架使用 koa 编写 web 应用,可以免除重复繁琐的回调函数
解决跨域问题通常采用CORS(Cross-Origin Resource Sharing)机制。 在Spring Boot中,可以通过自定义过滤器CORSFilter来处理跨域请求。在给出的示例代码中,创建了一个名为CORSFilter的过滤器,该过滤器拦截所有...
开源Android浏览器是一个面向开发者和爱好者提供的开放源代码项目,它允许用户访问跨域网页,这意味着该浏览器具有处理不同源之间通信的能力,这是许多现代网络应用所必需的功能。Android平台上的浏览器开发涉及到...
在SpringBoot中集成WebSocket和SockJS,我们可以利用Spring的WebSocket支持以及SockJS的跨域特性。 首先,我们需要在SpringBoot项目中引入相应的依赖。对于Maven项目,可以在`pom.xml`文件中添加Spring Websocket和...
2. **JSONP(JSON with Padding)**:JSONP是一种早期的跨域解决方案,适用于只支持GET请求的API。它通过动态创建`<script>`标签,利用其可以跨域加载脚本的特性来获取数据。但JSONP不支持POST等其他HTTP方法,且...