`
LoveLZY
  • 浏览: 57361 次
  • 性别: Icon_minigender_1
博客专栏
Group-logo
从零编写RPC框架
浏览量:0
社区版块
存档分类
最新评论

springRest+cross跨域支持

阅读更多
  最近一个接口项目需要支持跨域访问,基于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解决跨域问题+不同版本springboot解决跨域问题

    Vue 3.x+axios跨域方案的踩坑指南

    跨域问题是在开发过程中不可避免的,特别是在前端使用Vue3.x框架结合axios库进行开发时。跨域请求是指前端代码试图从不同的域(协议、域名或端口)访问资源,出于安全原因,浏览器默认禁止这种行为。 在开发环境下...

    js+jquery 跨域

    js + jquery + php跨域问题

    js+jsp+json+tomcat跨域访问

    在IT行业中,跨域访问是Web开发中一个重要的概念,特别是在使用JavaScript、JSP、JSON以及前端库如jQuery时。本教程将详细讲解如何利用这些技术实现跨域数据交互。 首先,我们需要理解“跨域”这个术语。在浏览器的...

    Ajax +jquery跨域获取JSON

    或者,如果服务器支持CORS,可以改为: ```javascript $.ajax({ url: 'http://example.com/weather', type: 'GET', dataType: 'json', crossDomain: true, success: function(data) { // 解析并处理返回的...

    前端跨域+后端跨域.zip

    2. CORS(Cross-Origin Resource Sharing):是现代浏览器支持的跨域解决方案,服务器通过设置响应头`Access-Control-Allow-Origin`等字段,允许特定的跨域请求。CORS分为简单请求和预检请求(OPTIONS请求),对POST...

    SpringBoot第 6 讲:SpringBoot+jersey跨域文件上传

    在Spring Boot中,我们可以使用`@CrossOrigin`注解或者配置CORS过滤器来启用跨域支持。例如,在全局配置类中: ```java @Configuration public class CorsConfig { @Bean public WebMvcConfigurer ...

    uploadify+ashx 跨域上传

    Uploadify支持跨域上传,这使得它可以在不同源的Web应用之间安全地传输数据,解决了传统的文件上传因同源策略限制而遇到的问题。 跨域上传的核心在于设置合适的HTTP头部,尤其是`Access-Control-Allow-Origin`头部...

    ajax+webservice跨域实现文件上传

    为解决此问题,可以采用CORS(Cross-Origin Resource Sharing,跨源资源共享)策略,通过设置服务器的响应头`Access-Control-Allow-Origin`来允许特定的域名进行跨域访问。 5. **ASP.NET**:本项目使用了ASP.NET...

    Ajax + Servlet 跨域访问(Jsonp技术)

    **Ajax + Servlet 跨域访问 (Jsonp技术)** 在Web开发中,浏览器的同源策略(Same-...尽管现代Web开发中有了CORS(跨源资源共享)等更安全的跨域解决方案,但Jsonp因其简单性和广泛支持,依然在很多场景下被广泛应用。

    vue.js+axios+qs+flask跨域测试

    在利用vuejs开发时,经常会遇到跨域请求数据的问题,本文利用python+flask做后台支撑,记录了在使用axios跨域请求数据时的各种问题,对于此类开发的小伙伴,有一定的借鉴意义。

    Vue-cli3.x + axios 跨域方案踩坑指北

    在生产环境中,跨域问题通常需要通过后端服务器配置 CORS(Cross-Origin Resource Sharing,跨源资源共享)策略来解决。 总结来说,`Vue-cli3.x + axios` 的跨域方案主要依赖于 `devServer.proxy` 配置,它允许...

    jwt完整无框架web例子+登录+跨域web demo

    这个"jwt完整无框架web例子+登录+跨域web demo"是一个基于JWT实现的简单Web应用程序,它包含了登录验证功能,并且支持跨域访问。下面我们将详细探讨JWT、无框架Web开发以及如何在Java中实现登录验证和跨域处理。 1....

    yxdYXD11123123#Frontend-Road#Koa入门+Koa路由+静态资源托管+洋葱模型概念+解决跨域1

    介绍koa是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的Web框架使用 koa 编写 web 应用,可以免除重复繁琐的回调函数

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    解决跨域问题通常采用CORS(Cross-Origin Resource Sharing)机制。 在Spring Boot中,可以通过自定义过滤器CORSFilter来处理跨域请求。在给出的示例代码中,创建了一个名为CORSFilter的过滤器,该过滤器拦截所有...

    开源android浏览器,访问跨域网页

    开源Android浏览器是一个面向开发者和爱好者提供的开放源代码项目,它允许用户访问跨域网页,这意味着该浏览器具有处理不同源之间通信的能力,这是许多现代网络应用所必需的功能。Android平台上的浏览器开发涉及到...

    sockJs实现的websocket跨域

    在SpringBoot中集成WebSocket和SockJS,我们可以利用Spring的WebSocket支持以及SockJS的跨域特性。 首先,我们需要在SpringBoot项目中引入相应的依赖。对于Maven项目,可以在`pom.xml`文件中添加Spring Websocket和...

    MVC+WebAPI跨域调用.rar

    2. **JSONP(JSON with Padding)**:JSONP是一种早期的跨域解决方案,适用于只支持GET请求的API。它通过动态创建`&lt;script&gt;`标签,利用其可以跨域加载脚本的特性来获取数据。但JSONP不支持POST等其他HTTP方法,且...

Global site tag (gtag.js) - Google Analytics