iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >使用Java怎么解决跨域问题
  • 910
分享到

使用Java怎么解决跨域问题

2023-06-06 16:06:14 910人浏览 安东尼
摘要

今天就跟大家聊聊有关使用Java怎么解决跨域问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是跨域(CORS)跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执

今天就跟大家聊聊有关使用Java怎么解决跨域问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

什么是跨域(CORS)

跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执行其他网站的脚本,它是由浏览器的同源策略所造成的,是浏览器对于javascript所定义的安全限制策略。

什么情况会跨域

  • 同一协议, 如Httphttps

  • 同一IP地址, 如127.0.0.1

  • 同一端口, 如8080

以上三个条件中有一个条件不同就会产生跨域问题。

解决方案

前端解决方案

后端解决方案

  • Nginx反向代理解决跨域

  • 服务端设置Response Header(响应头部)的Access-Control-Allow-Origin

  • 在需要跨域访问的类和方法中设置允许跨域访问(如spring中使用@CrossOrigin注解);

  • 继承使用Spring WEB的CorsFilter(适用于Spring mvcSpring Boot

  • 实现WebMvcConfigurer接口(适用于Spring Boot)

具体方式

一、使用Filter方式进行设置

使用Filter过滤器来过滤服务请求,向请求端设置Response Header(响应头部)的Access-Control-Allow-Origin属性声明允许跨域访问。

@WebFilterpublic class CorsFilter implements Filter {   @Override  public 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", "*");     response.setHeader("Access-Control-Max-Age", "3600");     response.setHeader("Access-Control-Allow-Headers", "*");    response.setHeader("Access-Control-Allow-Credentials", "true");    chain.doFilter(req, res);   } }

二、继承 HandlerInterceptorAdapter

@Componentpublic class CrossInterceptor extends HandlerInterceptorAdapter {  @Override  public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {    response.setHeader("Access-Control-Allow-Origin", "*");    response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE, OPTIONS");    response.setHeader("Access-Control-Max-Age", "3600");    response.setHeader("Access-Control-Allow-Headers", "*");    response.setHeader("Access-Control-Allow-Credentials", "true");    return true;  }}

三、实现 WebMvcConfigurer

@Configuration@SuppressWarnings("SpringJavaAutowiredFieldsWarningInspection")public class AppConfig implements WebMvcConfigurer {  @Override  public void addCorsMappings(CorsReGIStry registry) {    registry.addMapping("/**") // 拦截所有的请求        .allowedOrigins("http://www.abc.com") // 可跨域的域名,可以为 *        .allowCredentials(true)        .allowedMethods("*")  // 允许跨域的方法,可以单独配置        .allowedHeaders("*"); // 允许跨域的请求头,可以单独配置  }}

四、使用Nginx配置

location / {  add_header Access-Control-Allow-Origin *;  add_header Access-Control-Allow-Headers X-Requested-With;  add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,OPTIONS;  if ($request_method = 'OPTIONS') {   return 204;  }}

五、使用 @CrossOrgin 注解

如果只是想部分接口跨域,且不想使用配置来管理的话,可以使用这种方式

在Controller使用

@CrossOrigin@RestController@RequestMapping("/user")public class UserController {@GetMapping("/{id}")public User get(@PathVariable Long id) {}@DeleteMapping("/{id}")public void remove(@PathVariable Long id) {}}

在具体接口上使用

@RestController@RequestMapping("/user")public class UserController {@CrossOrigin@GetMapping("/{id}")public User get(@PathVariable Long id) {}@DeleteMapping("/{id}")public void remove(@PathVariable Long id) {}}

spring cloud Gateway 跨域配置

spring:  cloud:  gateway:   globalcors:    cors-configurations:     '[/**]':      # 允许跨域的源(网站域名/ip),设置*为全部      # 允许跨域请求里的head字段,设置*为全部      # 允许跨域的method, 默认为GET和OPTIONS,设置*为全部      allow-credentials: true      allowed-origins:       - "http://xb.abc.com"       - "http://sf.xx.com"      allowed-headers: "*"      allowed-methods:       - OPTIONS       - GET       - POST       - DELETE       - PUT       - PATCH      max-age: 3600

注意: 通过gateway 转发的其他项目,不要进行配置跨域配置

有时即使配置了也不会起作用,这时你可以根据浏览器控制的错误输出来查看问题,如果提示是 response header 出现了重复的 Access-Control-* 请求头,可以进行如下操作

import java.util.ArrayList;import org.springframework.cloud.gateway.filter.GatewayFilterChain;import org.springframework.cloud.gateway.filter.GlobalFilter;import org.springframework.cloud.gateway.filter.NettyWriteResponseFilter;import org.springframework.core.Ordered;import org.springframework.http.HttpHeaders;import org.springframework.stereotype.Component;import org.springframework.web.server.ServerWebExchange;import Reactor.core.publisher.Mono;@Component("corsResponseHeaderFilter")public class CorsResponseHeaderFilter implements GlobalFilter, Ordered { @Override public int getOrder() {  // 指定此过滤器位于NettyWriteResponseFilter之后  // 即待处理完响应体后接着处理响应头  return NettyWriteResponseFilter.WRITE_RESPONSE_FILTER_ORDER + 1; } @Override public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {  return chain.filter(exchange).then(Mono.defer(() -> {   exchange.getResponse().getHeaders().entrySet().stream()     .filter(kv -> (kv.getValue() != null && kv.getValue().size() > 1))     .filter(kv -> (       kv.geTKEy().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_ORIGIN)         || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_CREDENTIALS)         || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_METHODS)         || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_ALLOW_HEADERS)         || kv.getKey().equals(HttpHeaders.ACCESS_CONTROL_MAX_AGE)))     .forEach(kv -> {      kv.setValue(new ArrayList<String>() {{       add(kv.getValue().get(0));      }});     });   return chain.filter(exchange);  })); }}

看完上述内容,你们对使用Java怎么解决跨域问题有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程网精选频道,感谢大家的支持。

--结束END--

本文标题: 使用Java怎么解决跨域问题

本文链接: https://www.lsjlt.com/news/247699.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 使用Java怎么解决跨域问题
    今天就跟大家聊聊有关使用Java怎么解决跨域问题,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。什么是跨域(CORS)跨域(CORS)是指不同域名之间相互访问。跨域,指的是浏览器不能执...
    99+
    2023-06-06
  • java怎么解决跨域问题
    为了解决 Java 中的跨域问题,可以采取以下方法: 修改服务器端配置:在服务器端的响应中添加响应头,允许指定的源访问该资源。可...
    99+
    2024-02-29
    java
  • 使用Java如何解决跨域问题
    本篇内容主要讲解“使用Java如何解决跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“使用Java如何解决跨域问题”吧!跨域问题现在绝大多数公司的项目都是...
    99+
    2024-04-02
  • java后端怎么解决跨域问题
    在Java后端解决跨域问题可以使用以下几种方法: 使用Servlet的过滤器:创建一个实现javax.servlet.Filte...
    99+
    2023-10-23
    java
  • 使用Nginx解决跨域问题
    目录 使用Nginx解决跨域问题 1、修改浏览器、客户端访问地址 2、在nginx.conf配置文件需配置server 3、在Nginx中配置客户端访问的接口(按照规则或通配),并设置被代理的服务器 4、在Nginx中统一配置客户端访问的...
    99+
    2023-09-02
    nginx 运维 服务器
  • vue跨域问题怎么解决
    1、可以在后端服务器中进行配置,允许指定的域名或IP地址访问后端API,这样就可以解决跨域问题。常用的方法是在服务器端添加CORS(...
    99+
    2023-05-13
    vue跨域问题 vue
  • react跨域问题怎么解决
    在 React 中解决跨域问题通常有以下几种方法:1. 设置代理:在开发环境中,可以通过设置代理服务器来解决跨域问题。可以在 `pa...
    99+
    2023-08-19
    react
  • 怎么解决WebSocket跨域问题
    怎么解决WebSocket跨域问题?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。WebSocket通信是点对点:一是建立WebSocket链接的URL加上时间戳保证通信会话是唯...
    99+
    2023-06-09
  • ajax跨域问题怎么解决
    在Ajax请求中,由于浏览器的同源策略限制,如果请求的域名、端口或协议与当前页面不同,则会出现跨域问题,无法正常获取数据。以下是几种...
    99+
    2023-05-13
    ajax跨域问题 ajax
  • 怎么解决ajax跨域问题
    本篇内容主要讲解“怎么解决ajax跨域问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决ajax跨域问题”吧!什么是ajax跨域ajax跨域的原理aja...
    99+
    2024-04-02
  • vue2.0跨域问题怎么解决
    本篇内容主要讲解“vue2.0跨域问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue2.0跨域问题怎么解决”吧! 一种解决方案: 一般的情况下...
    99+
    2024-04-02
  • 怎么解决SpringBoot跨域问题
    这篇文章给大家分享的是有关怎么解决SpringBoot跨域问题的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。允许全部请求跨域许可的代码需要继承WebMvcConfigurerAdapter类。@Configura...
    99+
    2023-06-28
  • JavaScript跨域问题怎么解决
    这篇文章主要介绍了JavaScript跨域问题怎么解决的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇JavaScript跨域问题怎么解决文章都会有所收获,下面我们一起来看看吧。1.什么是跨域我们常常会在页面上使...
    99+
    2023-06-27
  • javascript怎么解决跨域问题
    这篇文章主要介绍了javascript怎么解决跨域问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。javascript 跨域问题以及解决办...
    99+
    2024-04-02
  • springboot怎么解决跨域问题
    在Spring Boot中解决跨域问题可以通过以下几种方式: 使用注解@EnableWebMvc和@CrossOrigin:在S...
    99+
    2023-10-25
    springboot
  • vue的跨域问题怎么解决
    这篇“vue的跨域问题怎么解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“vue的跨域问题怎么解决”文章吧。在vue中,跨...
    99+
    2023-07-04
  • 解决vue cli3使用axios跨域问题
    目录一、什么是跨域1、跨域2、同源策略3、跨域问题怎么出现的二、使用 axios 演示并解决跨域问题(vue-cli3.0)1、项目创建、与 axios 的使用2、跨域问题重现3、解...
    99+
    2024-04-02
  • Django cors跨域问题怎么解决
    这篇文章主要介绍“Django cors跨域问题怎么解决”,在日常操作中,相信很多人在Django cors跨域问题怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Django&nb...
    99+
    2023-07-02
  • Golang gin跨域问题怎么解决
    本文小编为大家详细介绍“Golang gin跨域问题怎么解决”,内容详细,步骤清晰,细节处理妥当,希望这篇“Golang gin跨域问题怎么解决”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。g...
    99+
    2023-06-30
  • Nginx解决跨域问题
    目录 前言 一、跨域问题 1.什么是跨域  2.CORS 二、Nginx跨域处理 三.补充 前言 这几天出现了一个问题,我们中的一个A系统需要给B系统调用,造成了跨域问题。 一、跨域问题 1.什么是跨域 当一个请求url的协议、域...
    99+
    2023-09-02
    nginx 服务器 开发语言
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作