SpringBoot解决跨域请求拦截

本文探讨了SpringBoot在微服务开发中如何解决跨域请求拦截问题。通过创建两个不同端口的Web项目,展示了当请求源不同时,浏览器的同源策略导致的跨域拦截。介绍了通过实现WebMvcConfigurer接口添加允许跨域的配置,以及使用@CrossOrigin注解进行更细粒度的权限控制。最后,鼓励开发者学习提升,提供了相关的Java架构学习资料。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言 

同源策略:判断是否是同源的,主要看这三点,协议,ip,端口。

同源策略就是浏览器出于网站安全性的考虑,限制不同源之间的资源相互访问的一种政策。

比如在域名https://www.baidu.com下,脚本不能够访问https://www.sina.com源下的资源,否则将会被浏览器拦截。

 

注意两点:

1.必须是脚本请求,比如AJAX请求。

但是如下情况不会产生跨域拦截

<img src="xxx"/>
<a href='xxx"> </a>

2.跨域拦截是前端请求已经发出,并且在后端返回响应时检查相关参数,是否允许接收后端请求。

 

 在微服务开发中,一个系统包含多个微服务,会存在跨域请求的场景。

 

本文主要讲解SpringBoot解决跨域请求拦截的问题。

 

搭建项目

这里创建两个web项目,web1 和 web2.

web2项目请求web1项目的资源。

这里只贴关键代码,完整代码参考GitHub

WEB2

创建一个Controller返回html页面

 

@Slf4j
@Controller
public class HomeController {
    @RequestMapping("/index")
    public String home(){
        log.info("/index");
        retu
### Spring Boot 中解决 CORS 请求配置方法 #### 使用 `@CrossOrigin` 注解 在Spring Boot中,可以通过使用`@CrossOrigin`注解来轻松地处理请求。此注解能够应用于整个控制器类或是单个处理器方法之上。它支持多种属性设定,比如指定允许的源地址、HTTP 方法以及自定义请求头部等信息[^2]。 ```java import org.springframework.web.bind.annotation.CrossOrigin; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; @RestController @CrossOrigin(origins = "http://example.com", methods = {RequestMethod.GET, RequestMethod.POST}) public class MyController { @GetMapping("/api/data") public String getData() { return "Data from server"; } } ``` #### 全局配置方式 除了利用注解外,还可以通过全局配置的方式来管理所有的需求。这通常是在应用程序启动时完成初始化工作,在配置文件内声明CORS规则并将其注册至容器之中。这种方式适用于更复杂的场景下统一管理维护策略[^4]。 ```java import org.springframework.context.annotation.Bean; 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 WebConfig implements WebMvcConfigurer { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") // 对所有路径生效 .allowedOrigins("*") // 支持任意来源站点访问 .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS") // 允许使用的Http动词 .maxAge(3600); // 预检请求的有效期为一小时 } } ``` 对于更加细粒度或者特殊的业务逻辑,则可能需要创建专门的过滤器来进行拦截处理请求的相关事宜。过上述两种方案已经覆盖了大部分实际应用场景下的需求[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值