`

让Spring 支持 跨域请求

    博客分类:
  • CORS
阅读更多

参考: http://vraidsys.com/2012/08/spring-mvc-3-enable-cross-origin-resource-sharing/

http://stackoverflow.com/questions/23103832/spring-mvc-does-not-handle-requestmethod-options

http://stackoverflow.com/questions/8863571/cors-request-why-are-the-cookies-not-sent

 

 

1. 修改web.xml

添加dispatchOptionsRequest 参数为true

<servlet>
    <servlet-name>spring-servlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>dispatchOptionsRequest</param-name>
        <param-value>true</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>spring-servlet</servlet-name>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

2. 创建  OPTIONS RequestMapping

public class CorsCommon {

    @RequestMapping(value ="/abc" , method = RequestMethod.OPTIONS)
    public void commonOptions(HttpServletResponse theHttpServletResponse) throws IOException {
        response.setHeader("Access-Control-Allow-Methods", "HEAD,GET,POST,PUT,DELETE");
        response.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through");
        response.setHeader("Access-Control-Expose-Headers", "ETag,Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through");
        response.setHeader("Access-Control-Allow-Origin", "*");
    }

 @RequestMapping(value ="/abc" , method = RequestMethod.GET)
    public void commonOptions(HttpServletResponse response) throws IOException {
        System.out.println("test"); 
        response.getWriter().println("test");
    }

}

3. ajax 跨域请求

<script type="text/javascript">
    function getUserInfo() {
		var url = "http://127.0.0.1/abc";

     
        $.ajax({
            url: url,
            crossDomain: true,
            success: function (data, textStatus) {
                console.log('received ', data);
                $("#userinfo").html(data);
            },
            dataType: "text"


        });
    }
</script>

 

ajax 跨域请求要发送cookie(FF 和Chrome可以, IE发送不了cookie , 待解决)过去需要 加上

xhrFields: {
    withCredentials: true
   }    

服务器端要设置Access-Control-Allow-Credentials 为 true

 

  response.setHeader("Access-Control-Allow-Credentials","true");
 
ajax跨域请求时不能发送自定义的header, 要发送需要在Access-Control-Allow-Headers ,Access-Control-Expose-Headers里面添加自定义的header, 比如: “X-xxx-header”

 

   response.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-xxx-header");
   response.setHeader("Access-Control-Expose-Headers", "ETag,Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-xxx-header");

 

完整请求

js

<script type="text/javascript">
    function getUserInfo() {
		var url = "http://127.0.0.1/abc";

     
        $.ajax({
            url: url,
            crossDomain: true,
            success: function (data, textStatus) {
                console.log('received ', data);
                $("#userinfo").html(data);
            },
           xhrFields: {
              withCredentials: true
           },    
            dataType: "text"


        });
    }
</script>

 java

   response.setHeader("Access-Control-Allow-Methods", "HEAD,GET,POST,PUT,DELETE");
            response.setHeader("Access-Control-Allow-Headers", "Content-Type,Content-Length,Authorization,If-Match,If-None-Match,X-Experience-API-Version,X-Experience-API-Consistent-Through");
            response.setHeader("Access-Control-Expose-Headers", "ETag,Last-Modified,Cache-Control,Content-Type,Content-Length,WWW-Authenticate,X-Experience-API-Version,X-Experience-API-Consistent-Through");
       response.setHeader("Access-Control-Allow-Origin", "*");
            response.setHeader("Access-Control-Allow-Credentials","true");

 

分享到:
评论

相关推荐

    spring boot 支持js跨域请求

    spring boot 支持跨域 前台不需要jsonp 请求 正常js即可 spring boot 支持跨域 前台不需要jsonp 请求 正常js即可

    基于Spring和Spring MVC实现可跨域访问的REST服务

    默认情况下,浏览器阻止跨域请求,但我们可以配置Spring MVC来允许特定来源的请求。这通常通过`@CrossOrigin`注解实现,可以应用于Controller类、方法或全局配置: ```java @CrossOrigin(origins = ...

    详解Spring Boot 2.0.2+Ajax解决跨域请求的问题

    "详解Spring Boot 2.0.2+Ajax解决跨域请求的问题" 知识点1:什么是跨域请求? 跨域请求是指浏览器从一个域名下的网页去请求另一个域名下的资源时,会出现的安全限制问题。该限制是因为浏览器的同源策略(Same-...

    ajax跨域请求

    ### AJAX跨域请求详解 #### 一、引言 在Web开发中,由于浏览器的同源策略限制,AJAX请求通常只能向同源服务器发送请求。然而,在实际应用中,跨域请求的需求非常常见。本篇文章将通过一个具体的示例(JSP页面+后台...

    Spring Boot设置支持跨域请求过程详解

    主要介绍了Spring Boot设置支持跨域请求过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    Spring 跨域解决方案官方 demo

    在现代Web开发中,跨域资源共享(CORS)是一个重要的概念,它允许...总之,Spring提供的CORS解决方案让开发者能够轻松处理跨域请求,同时保持应用的安全性。理解并熟练运用这些知识,对于构建现代化的Web应用至关重要。

    spring cloud gateway跨域实现

    对于前后端分离的应用,我们需要在Spring Cloud Gateway中配置CORS策略来允许跨域请求。这可以通过创建一个配置类实现。下面是一个简单的示例,展示了如何配置允许所有源的跨域请求: ```java @Configuration ...

    Spring Boot Web应用开发 CORS 跨域请求支持

    Spring Boot Web应用开发 CORS 跨域请求支持 CORS(Cross-Origin Resource Sharing,跨域资源共享)是一种机制,它允许Web页面从不同的域名下加载资源,而不受同源策略的限制。 在Spring Boot Web应用开发中,CORS ...

    Tomcat跨域请求资源解决方案.zip

    本资料包“Tomcat跨域请求资源解决方案.zip”显然是针对这个问题提供了一个具体的解决方案,主要聚焦于如何在Apache Tomcat服务器上配置以允许跨域请求。 Tomcat是Java Servlet容器,广泛用于部署Java Web应用程序...

    详解java 中Spring jsonp 跨域请求的实例

    在Spring框架中处理JSONP跨域请求是一个常见问题,尤其当开发者...通过以上步骤,开发者可以利用Spring框架提供的JSONP支持,实现跨域请求的数据交互。这不仅解决了跨域问题,而且也保持了数据交互的灵活性和安全性。

    Spring 跨域配置请求详解

    解决Spring跨域问题有多种方式: 1. **添加响应头**: 你可以通过在后端控制器的方法中手动添加响应头来允许特定的跨域请求。例如,在响应头中设置`Access-Control-Allow-Origin`为`*`,表示允许所有源进行跨域...

    cors-filter-1.7.jar spring解决跨域问题 java

    Spring框架提供了灵活的解决方案来处理跨域请求。本篇将详细讲解如何利用Spring解决跨域问题,以及如何使用`cors-filter-1.7.jar`和`java-property-utils-1.9.1.jar`这两个库来辅助实现。 一、Spring解决跨域问题的...

    跨域请求解决方案

    在Java后端,我们可以使用Spring框架提供的CORS配置来允许跨域请求。在Spring Boot应用中,可以在`WebSecurityConfigurerAdapter`的配置类中添加CORS配置: ```java @Configuration public class WebConfig ...

    Dubbox跨域请求、Cookie设置

    【标题】"Dubbox跨域请求、Cookie设置"所涉及的知识点主要集中在分布式服务框架Dubbo的跨域问题处理和Cookie的配置上。Dubbox是阿里巴巴开源的一个基于Dubbo的扩展,提供了更多的特性,如REST支持、Zookeeper注册...

    Spring实现处理跨域请求代码详解

    Spring实现处理跨域请求代码详解是指在Spring框架中如何处理跨域请求,以便让客户端可以跨域访问服务器端的资源。本文将详细介绍跨域请求的概念、原因、解决方案,并提供实用的代码示例。 一、什么是跨域请求? ...

    解决springboot实现跨域session共享问题

    在这个实现类中,我们可以覆盖`addCorsMappings`方法,为每个需要处理的跨域请求设置规则: ```java @Configuration public class CorsConfig implements WebMvcConfigurer { @Override public void ...

    Spring Boot 如何优雅的解决 Ajax + 自定义 headers 的跨域请求.docx

    Spring Boot 如何优雅的解决 Ajax + 自定义 headers 的跨域请求

    springboot 跨域请求

    在Spring Boot应用中,处理跨域请求是一项常见的需求,特别是在前后端分离的开发模式下。Spring Boot提供了多种方式来实现跨域支持,其中最常用的是通过CORS(Cross-Origin Resource Sharing,跨源资源共享)机制。...

Global site tag (gtag.js) - Google Analytics