springboot项目中解决跨域问题,前端无法访问后端数据

本文介绍了三种在Spring Boot中解决跨域问题的方法。第一种是在接口上直接使用@CrossOrigin注解,第二种是创建一个配置类并定义一个CorsFilter Bean,允许所有源访问。第三种方法是实现WebMvcConfigurer接口,通过addCorsMappings方法配置跨域设置,允许所有方法和源,并设置其他参数。

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

第一种方式

在需要访问的接口上加上注解 @CrossOrigin

例:

    @RequestMapping(path = "/index", method = RequestMethod.GET)
    @ResponseBody
    @CrossOrigin//解决跨域问题
    public List<Map<String,Object>> getIndexPage2(){

        List<String> res= new ArrayList<>();
        res.add("spring");
        res.add("boot");

        //返回数据给前端
        return res;
    }

 第二种方式

创建一个配置类,代码如下:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Bean
    public CorsFilter corsFilter() {
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("/**");//允许哪些域访问
        corsConfiguration.addAllowedHeader("*");//允许哪些请求头访问
        corsConfiguration.addAllowedMethod("*");//允许哪些请求方法访问
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        source.registerCorsConfiguration("/**",corsConfiguration);//设置映射
        return new CorsFilter(source);
    }
}

 第三种方式

创建一个配置类,代码如下:

@Configuration
public class CorsConfig implements WebMvcConfigurer {

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**").//设置映射
                allowedOriginPatterns("*").//允许哪些域访问
                allowedMethods("GET","POST","PUT").//允许哪些请求方法访问
                allowCredentials(true).//是否可以携带Cookie
                maxAge(3600).//3600秒内可以不用再访问该配置(是否允许该配置中的设置)
                allowedHeaders("*");//允许哪些请求头访问
    }
}

### 实现Spring Boot前端的连接 在现代Web应用程序开发中,前后端分离是一种常见的架构模式。在这种模式下,前端后端各自独立开发并部署,通过定义良好的API接口进行交互。 #### API设计原则 为了确保前后端能够高效协作,在设计API时应遵循RESTful风格的设计理念[^2]。这不仅有助于提高系统的可扩展性和灵活性,还便于不同平台上的客户端调用这些服务。 #### 创建Spring Boot REST Controller 下面是一个简单的例子展示如何创建一个返回JSON格式响应信息的控制器: ```java @RestController @RequestMapping("/api") public class HelloController { @GetMapping("/hello") public ResponseEntity<String> sayHello() { return new ResponseEntity<>("Hello, World!", HttpStatus.OK); } } ``` 此代码片段展示了如何设置一个基本的GET请求处理器方法`sayHello()`,它会向访问者发送一条问候消息作为回应。 #### 配置资源共享(CORS) 由于浏览器的安全策略,默认情况下不允许来自其他名下的页面发起Ajax请求到当前服务器地址。因此当采用前后端分离的方式构建应用时,通常需要解决这个问题。可以通过全局配置或针对特定路径的方式来允许指定源站发出CORS预检请求: ```properties spring.mvc.cors.allowed-origins=http://localhost:8080 spring.mvc.cors.allowed-methods=GET,POST,PUT,DELETE,OPTIONS spring.mvc.cors.allowed-headers=* ``` 以上配置项可以在application.properties文件内添加以启用CORS支持[^1]。 #### Vue.js中的Axios库用于发起HTTP请求 对于前端部分,则可以借助于像axios这样的JavaScript HTTP客户端工具包来进行异步的数据获取操作。这里给出一段示例代码说明怎样从Vue组件内部调用上述定义好的/hello接口: ```javascript import axios from 'axios'; export default { name: "App", mounted(){ this.fetchData(); }, methods:{ async fetchData(){ try{ const response = await axios.get('http://<backend-server>/api/hello'); console.log(response.data); // 输出:"Hello, World!" }catch(error){ console.error("There was an error fetching the data! ",error); } } } }; ``` 这段脚本实现了在组件加载完成后自动执行一次对后台服务端口/api/hello的GET请求,并打印出收到的结果字符串。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IABQL

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值