SpringBoot解决ajax跨域问题

From: https://www.jianshu.com/p/e57ed1ee3070

利用注解的方式解决AJAX请求跨域问题

一、第一种方式:

1、编写一个支持跨域请求的 Configuration

import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;/*** 处理AJAX请求跨域的问题* @author Levin* @time 2017-07-13*/
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {static final String ORIGINS[] = new String[] { "GET", "POST", "PUT", "DELETE" };@Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping("/**").allowedOrigins("*").allowCredentials(true).allowedMethods(ORIGINS).maxAge(3600);}
}

2、HTTP请求接口

@RestController
public class HelloController {@AutowiredHelloService helloService;@GetMapping(value = "/test", produces = MediaType.APPLICATION_JSON_UTF8_VALUE)public String query() {return "hello";}
}

二、 第二种方式(推荐)

PS:第一种存在一个问题,当服务器抛出 500 的时候依旧存在跨域问题

@SpringBootApplication
@ComponentScan
@EnableDiscoveryClient
public class ManagementApplication {public static void main(String[] args) {SpringApplication.run(ManagementApplication.class, args);}private CorsConfiguration buildConfig() {CorsConfiguration corsConfiguration = new CorsConfiguration();corsConfiguration.addAllowedOrigin("*");corsConfiguration.addAllowedHeader("*");corsConfiguration.addAllowedMethod("*");corsConfiguration.addExposedHeader(HttpHeaderConStant.X_TOTAL_COUNT);return corsConfiguration;}/*** 跨域过滤器** @return*/@Beanpublic CorsFilter corsFilter() {UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();source.registerCorsConfiguration("/**", buildConfig()); // 4return new CorsFilter(source);}
}

2、index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>跨域请求</title>
<script src="https://cdn.bootcss.com/jquery/1.10.2/jquery.min.js">
</script>
<script>
$(document).ready(function(){$("button").click(function(){$.ajax({url:"http://localhost:8080/test",success:function(result){$("#p1").html(result);}});});
});
</script>
</head>
<body><p width="500px" height="100px" id="p1"></p>
<button>获取其他内容</button>
</body>
</html>

三、第三种方式,编写Filter过滤器

package com.cci.market.common.filter;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse;import org.springframework.stereotype.Component;/*** 处理跨域问题* @author MR.ZHENG* @date 2016/08/08**/
@Component
public class OriginFilter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse res,FilterChain chain) throws IOException, ServletException {HttpServletResponse response = (HttpServletResponse) res;response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE,PUT");response.setHeader("Access-Control-Max-Age", "3600");response.setHeader("Access-Control-Allow-Headers", "x-requested-with");chain.doFilter(req, res);}@Overridepublic void destroy() {// TODO Auto-generated method stub}}

四、Nginx跨域配置

Nginx跨域也比较简单,只需添加以下配置即可。

location / {proxy_pass http://localhost:8080;if ($request_method = 'OPTIONS') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';add_header 'Access-Control-Max-Age' 1728000;add_header 'Content-Type' 'text/plain; charset=utf-8';add_header 'Content-Length' 0;return 204;}if ($request_method = 'POST') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';}if ($request_method = 'GET') {add_header 'Access-Control-Allow-Origin' '*';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';add_header 'Access-Control-Expose-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Content-Range,Range,Token';}
}

其中:add_header 'Access-Control-Expose-Headers' 务必加上你请求时所带的header。例如本例中的“Token”,其实是前端传给后端过来的。如果记不得也没有关系,浏览器的调试器会有详细说明。


 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/402624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》

【视频&#xff1a;dataguru北京线下沙龙-第二部 《Oracle 索引优化思路--案例分享 -- 刘盛》 /微笑】

1^2+2^2+……+n^2的公式证明

求^2就从^3入手,求^3就从^4入手,求^t就从^(t1)入手 因为(n1)^3n^33n^23n1 所以2^31^33*1^23*11 3^32^33*2^23*21 …… (n1)^3n^33n^22n1 所以2^33^3……(n1)^31^32^3……3*(1^22^2……^2)3(12……n)(11……1) 所以3(1^22^2……n^2)n^33n^22n1-a-3-[n(n1)]/2-n 所以S(An)1^22^2……

mysql 数据库授权(给某个用户授权某个数据库)

先设置该用户只有show database权限grant select,insert,update,delete on redmine1.* to jira"%" identified by "jira";授权命令GRANT 语句的语法如下&#xff1a;GRANT privileges (columns)ON whatTO user IDENTIFIEDBY "password"WITH GRAN…

Nginx突破高并发的性能优化 - 运维笔记

在日常的运维工作中&#xff0c;经常会用到nginx服务&#xff0c;也时常会碰到nginx因高并发导致的性能瓶颈问题。今天这里简单梳理下nginx性能优化的配置&#xff08;仅仅依据本人的实战经验而述&#xff0c;如有不妥&#xff0c;敬请指出~&#xff09; 一、这里的优化主要是指…

给你的Mr.Right画张择偶地图像

爱一个人就算做不到爱他的全部&#xff0c;至少也应该尊重他的真实&#xff0c;而不是苛求他变成你想要的样子。 娶妻当娶郭芙蓉&#xff0c;经典语录。我是郭芙蓉&#xff0c;我不会武功&#xff0c;我来自江湖&#xff0c;我与众不同。再苦再累&#xff0c;就当自己是二百五&…

ISO13485给企业带来的益处

1、ISO13485变强制性认证&#xff0c;日益受到欧美和中国政府机构的重视&#xff0c;有利于消除国际贸易中的技术壁垒&#xff0c;是进入国际市场的通行证&#xff1b; 2、提高和改善企业的管理水平&#xff0c;增加企业的知名度&#xff1b; 3、提高和保证产品的质量水平&…

[HDOJ5289]Assignment(RMQ,二分)

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid5289 题意&#xff1a;求满足区间内最大值和最小值差为k的区间个数。 预处理出区间的最值&#xff0c;枚举左端点&#xff0c;根据最值的单调性二分枚举右端点&#xff0c;使得找到最右侧max-min<k&#xff…

java实现HTTP请求的三种方式

From: https://www.cnblogs.com/hhhshct/p/8523697.html 目前JAVA实现HTTP请求的方法用的最多的有两种&#xff1a;一种是通过HTTPClient这种第三方的开源框架去实现。HTTPClient对HTTP的封装性比较不错&#xff0c;通过它基本上能够满足我们大部分的需求&#xff0c;HttpClien…

ActiveMQ queue 代码示例

生产者&#xff1a; package com.111.activemq;import javax.jms.Connection; import javax.jms.ConnectionFactory; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessa…

SpringBoot时间戳与MySql数据库记录相差14小时排错

From: http://www.cnblogs.com/jason1990/archive/2018/11/28/10032181.html 项目中遇到存储的时间戳与真实时间相差14小时的现象,以下为解决步骤. 问题 CREATE TABLE incident (id int(11) NOT NULL AUTO_INCREMENT,created_time timestamp NOT NULL DEFAULT CURRENT_TIMES…

HDU 1233 还是畅通工程(最小生成树)

传送门 还是畅通工程 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 41447 Accepted Submission(s): 18920 Description 某省调查乡村交通状况&#xff0c;得到的统计表中列出了任意两村庄间的距离。省政府“畅…

出了本练内功的书:《完美软件开发:方法与逻辑》

首先说下什么叫“完美软件开发”&#xff0c;想象一下&#xff0c;完美的圆在现实中是不存在的&#xff0c;现实中的圆只能是对完美的圆的回归&#xff0c;但完美的圆描述了圆的构成规则&#xff0c;完美软件开发意义与此相同&#xff0c;它试图描述软件开发的规则和铁律。但既…

Springboot后台接收前端Date类型

From: https://my.oschina.net/zicheng/blog/2963117 这个问题不是专门针对Springboot的&#xff0c;Springmvc也同样适用于这一个问题。 昨的是Springboot前后端分离的项目&#xff0c;今天和前端对接口发现前端的请求走不到后台&#xff0c;检查了请求什么的都没有问题&…

关于jTopo的引用

jTopo是一款 2 D和3D模型展示的插件&#xff0c;不过目前文档不是很齐全&#xff0c;刚开始看的时候就有点懵了&#xff0c;因为你在网上很难找到jTopo的资料。下面我就介绍一下jTopo 的引用吧。 1、首先在官网上下载到jTopo的包&#xff0c;地址&#xff1a;http://www.jtopo.…

mysql重置root密码方法

2019独角兽企业重金招聘Python工程师标准>>> 1. 先关闭mysqld 2. 运行&#xff1a; mysqld_safe --skip-grant-tables 3. 另开一个窗口&#xff0c;用 mysql -uroot 登录mysql&#xff0c;执行 UPDATE mysql.user SET PasswordPASSWORD(你的密码) WHERE User…

插入排序之C++实现

描述 插入排序是一种简单直观的排序算法。它的基本思想是将一个待排序的数据序列分为已排序和未排序两部分&#xff0c;每次从未排序序列中取出一个元素&#xff0c;然后将它插入到已排序序列的适当位置&#xff0c;直到所有元素都插入完毕&#xff0c;即完成排序。 实现思路…

spring boot使用logback实现多环境日志配置

From: https://blog.csdn.net/vitech/article/details/53812137 软件生存周期中&#xff0c;涉及代码运行的环节有编码、测试和维护阶段&#xff0c;而一套成熟的代码&#xff0c;在此三个阶段&#xff0c;数据库、日志路径、日志级别、线程池大小等配置一般会不一样。作为开发…

IOT(Index Organized Table)

我们知道一般的表都以堆(heap)的形式来组织的&#xff0c;这是无序的组织方式。Oracle还提供了一种有序的表&#xff0c;它就是索引组织表&#xff0c;简称IOT表。IOT表上必须要有主键&#xff0c;而IOT表本身不对应segment&#xff0c;表里所有的数据都存放在主键所在的索引的…

C++中的 :: 用法

::是运算符中等级最高的&#xff0c;它分为三种:1)global scope(全局作用域符&#xff09;&#xff0c;用法&#xff08;::name)2)class scope(类作用域符&#xff09;&#xff0c;用法(class::name)3)namespace scope(命名空间作用域符&#xff09;&#xff0c;用法(namespace…

Spring Boot SLF4J日志实例

From: https://blog.csdn.net/lxh18682851338/article/details/78560295 默认情况下&#xff0c;SLF4j日志记录包含在Spring Boot Web应用程序中&#xff0c;只需要启用它就可以了。 注意&#xff1a;查看此Spring Boot Logback XML模板以了解默认的日志记录模式和配置。 SLF4…