当前位置: 首页 > news >正文

西安做网站公司怎么样深一集团的网站谁做的

西安做网站公司怎么样,深一集团的网站谁做的,12306网站谁做的,PHP网站开发简单实例作者 | 磊哥来源 | Java面试真题解析#xff08;ID#xff1a;aimianshi666#xff09;转载请联系授权#xff08;微信ID#xff1a;GG_Stone#xff09;跨域问题指的是不同站点之间#xff0c;使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制#…作者 | 磊哥来源 | Java面试真题解析IDaimianshi666转载请联系授权微信IDGG_Stone跨域问题指的是不同站点之间使用 ajax 无法相互调用的问题。跨域问题本质是浏览器的一种保护机制它的初衷是为了保证用户的安全防止恶意网站窃取数据。但这个保护机制也带来了新的问题它的问题是给不同站点之间的正常调用也带来的阻碍那怎么解决这个问题呢接下来我们一起来看。跨域三种情况在请求时如果出现了以下情况中的任意一种那么它就是跨域请求协议不同如 http 和 https域名不同端口不同。也就是说即使域名相同如果一个使用的是 http另一个使用的是 https那么它们也属于跨域访问。常见的跨域问题如下图所示跨域问题演示接下来我们使用两个 Spring Boot 项目来演示跨域的问题其中一个是端口号为 8080 的前端项目另一个端口号为 9090 的后端接口项目。前端网站前端项目只需要在 resources 下放两个文件一个用于发送 ajax 请求的 jquery.js另一个是 html 前端页面工程目录如下图所示其中前端页面 index.html 的代码如下!DOCTYPE html html langen headmeta charsetUTF-8meta http-equivX-UA-Compatible contentIEedgemeta nameviewport contentwidthdevice-width, initial-scale1.0title跨域测试页面/titlescript srcjs/jquery.min.js/script /head body h1跨域测试/h1 divinput typebutton onclickmySubmit() value 发送跨域请求  /div scriptfunction mySubmit() {// 发送跨域请求jQuery.ajax({url: http://localhost:9090/test,type: POST,data: {name: Java},success: function (result) {alert(返回数据  result.data);}});} /script /body /html后端接口后端接口项目首先先在 application.properties 配置文件中设置项目的端口号为 9090如下所示server.port9090然后创建一个后端控制器返回一个 JSON 格式的数据实现代码如下import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;RestController public class TestController {RequestMapping(/test)public HashMapString, Object test() {return new HashMapString, Object() {{put(state, 200);put(data, success);put(msg, );}};} }以上两个项目创建并启动成功之后使用前端项目访问后端接口因为端口不一样所以也属于跨域访问运行结果如下图所示解决跨域问题在 Spring  Boot 中跨域问题有很多种解决方案比如以下 5 个使用 CrossOrigin 注解实现跨域通过配置文件实现跨域通过 CorsFilter 对象实现跨域通过 Response 对象实现跨域通过实现 ResponseBodyAdvice 实现跨域。当然如果你愿意的话还可以使用过滤器来实现跨域但它的实现和第 5 种实现类似所以本文就不赘述了。解决方案1通过注解跨域使用 CrossOrigin 注解可以轻松的实现跨域此注解既可以修饰类也可以修饰方法。当修饰类时表示此类中的所有接口都可以跨域当修饰方法时表示此方法可以跨域它的实现如下import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import java.util.HashMap;RestController CrossOrigin(origins  *) public class TestController {RequestMapping(/test)public HashMapString, Object test() {return new HashMapString, Object() {{put(state, 200);put(data, success);put(msg, );}};} }以上代码的执行结果如下图所示从上图中可以看出前端项目访问另一个后端项目成功了也就说明它解决了跨域问题。优缺点分析此方式虽然虽然实现跨域比较简单但细心的朋友也能发现使用此方式只能实现局部跨域当一个项目中存在多个类的话使用此方式就会比较麻烦需要给所有类上都添加此注解。解决方案2通过配置文件跨域接下来我们通过设置配置文件的方式就可以实现全局跨域了它的实现步骤如下创建一个新配置文件添加 Configuration 注解实现 WebMvcConfigurer 接口重写 addCorsMappings 方法设置允许跨域的代码。具体实现代码如下import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;Configuration // 一定不要忽略此注解 public class CorsConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping(/**) // 所有接口.allowCredentials(true) // 是否发送 Cookie.allowedOriginPatterns(*) // 支持域.allowedMethods(new String[]{GET, POST, PUT, DELETE}) // 支持方法.allowedHeaders(*).exposedHeaders(*);} }解决方案3通过 CorsFilter 跨域此实现方式和上一种实现方式类似它也可以实现全局跨域它的具体实现代码如下import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.web.cors.CorsConfiguration; import org.springframework.web.cors.UrlBasedCorsConfigurationSource; import org.springframework.web.filter.CorsFilter;Configuration // 一定不能忽略此注解 public class MyCorsFilter {Beanpublic CorsFilter corsFilter() {// 1.创建 CORS 配置对象CorsConfiguration config  new CorsConfiguration();// 支持域config.addAllowedOriginPattern(*);// 是否发送 Cookieconfig.setAllowCredentials(true);// 支持请求方式config.addAllowedMethod(*);// 允许的原始请求头部信息config.addAllowedHeader(*);// 暴露的头部信息config.addExposedHeader(*);// 2.添加地址映射UrlBasedCorsConfigurationSource corsConfigurationSource  new UrlBasedCorsConfigurationSource();corsConfigurationSource.registerCorsConfiguration(/**, config);// 3.返回 CorsFilter 对象return new CorsFilter(corsConfigurationSource);} }解决方案4通过 Response 跨域此方式是解决跨域问题最原始的方式但它可以支持任意的 Spring Boot 版本早期的 Spring Boot 版本也是支持的。但此方式也是局部跨域它应用的范围最小设置的是方法级别的跨域它的具体实现代码如下import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletResponse; import java.util.HashMap;RestController public class TestController {RequestMapping(/test)public HashMapString, Object test(HttpServletResponse response) {// 设置跨域response.setHeader(Access-Control-Allow-Origin, *);return new HashMapString, Object() {{put(state, 200);put(data, success);put(msg, );}};} }解决方案5ResponseBodyAdvice通过重写 ResponseBodyAdvice 接口中的 beforeBodyWrite返回之前重写方法我们可以对所有的接口进行跨域设置它的具体实现代码如下import org.springframework.core.MethodParameter; import org.springframework.http.MediaType; import org.springframework.http.server.ServerHttpRequest; import org.springframework.http.server.ServerHttpResponse; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.servlet.mvc.method.annotation.ResponseBodyAdvice;ControllerAdvice public class ResponseAdvice implements ResponseBodyAdvice {/*** 内容是否需要重写通过此方法可以选择性部分控制器和方法进行重写* 返回 true 表示重写*/Overridepublic boolean supports(MethodParameter returnType, Class converterType) {return true;}/*** 方法返回之前调用此方法*/Overridepublic Object beforeBodyWrite(Object body, MethodParameter returnType, MediaType selectedContentType,Class selectedConverterType, ServerHttpRequest request,ServerHttpResponse response) {// 设置跨域response.getHeaders().set(Access-Control-Allow-Origin, *);return body;} }此实现方式也是全局跨域它对整个项目中的所有接口有效。原理分析为什么通过以上方法设置之后就可以实现不同项目之间的正常交互呢这个问题的答案也很简单我们之前在说跨域时讲到“跨域问题本质是浏览器的行为它的初衷是为了保证用户的访问安全防止恶意网站窃取数据”那想要解决跨域问题就变得很简单了只需要告诉浏览器这是一个安全的请求“我是自己人”就行了那怎么告诉浏览器这是一个正常的请求呢只需要在返回头中设置“Access-Control-Allow-Origin”参数即可解决跨域问题此参数就是用来表示允许跨域访问的原始域名的当设置为“*”时表示允许所有站点跨域访问如下图所示所以以上 5 种解决跨域问题的本质都是给响应头中加了一个 Access-Control-Allow-Origin 的响应头而已。演示项目源码https://gitee.com/mydb/springboot-examples/tree/master/spring-boot-cross总结跨域问题的本质是浏览器为了保证用户的一种安全拦截机制想要解决跨域问题只需要告诉浏览器“我是自己人不要拦我”就行。它的常见实现方式有 5 种通过注解实现局部跨域、通过配置文件实现全局跨域、通过 CorsFilter 对象实现全局跨域、通过 Response 对象实现局部跨域通过 ResponseBodyAdvice 实现全局跨域。参考 鸣谢blog.csdn.net/pjmike233/article/details/82461911是非审之于己毁誉听之于人得失安之于数。公众号Java面试真题解析面试合集https://gitee.com/mydb/interview往期推荐面试突击80说一下 Spring 中 Bean 的生命周期面试突击79Bean 作用域是啥它有几种类型面试突击78Autowired 和 Resource 有什么区别
http://www.zqtcl.cn/news/790640/

相关文章:

  • 自己有服务器如何建设微网站网站建设的开发方式和费用
  • 网站如何接入支付宝可以看网站的浏览器
  • 档案网站建设的原则网页设计html代码可以查重吗
  • 万宁网站建设公司新乡市延津县建设局网站
  • 校园网站建设的意义2016wordpress淘宝客程序
  • 翻书效果的网站餐厅网站设计
  • 多少钱算网站中山 网站定制
  • 镇江网站制作价格如何计算本地生活服务平台app
  • 洞泾网站建设怎么做推广赚佣金
  • 三拼域名做网站大连自助建站软件
  • 怎么做hs网站最专业的网站开发公司哪家最专业
  • 南京做网站的公司排名科技:开局研发六代战机许禾
  • 网站怎么做搜索引擎淘宝网站怎么做特价
  • 仿制网站建设oa办公系统官网
  • 深圳网站托管企业建站源码系统
  • 个人空间网站建设报告建站是什么东西
  • 好看的模板网站建设西安网站模板建站
  • 建设网站二级子页打不开广告设计平面设计培训班
  • 网站公司做网站要多少钱新乡
  • 天津谁做网站莱芜人才网招聘网
  • 学做网站的书籍自己做网站 最好的软件
  • 手机网站专题电商入门视频教程免费
  • aspx网站模板制作网页常用的软件有哪些
  • 网站主关键词湖南网站定制
  • 长沙seo网站排名优化公司进入秦皇岛最新规定
  • 企业网站优化平台宝山北京网站建设
  • 给人做代工的网站加盟代理网
  • 网站建设用dw电脑谷歌浏览器打开是2345网址导航
  • 做外贸一般总浏览的网站太原的网站建设公司哪家好
  • 台州建网站公司wordpress 用微信登陆