惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

IT之家
IT之家
博客园_首页
S
SegmentFault 最新的问题
罗磊的独立博客
博客园 - 【当耐特】
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
阮一峰的网络日志
阮一峰的网络日志
D
Docker
雷峰网
雷峰网
Google DeepMind News
Google DeepMind News
博客园 - 司徒正美
V
V2EX
大猫的无限游戏
大猫的无限游戏
V
Visual Studio Blog
腾讯CDC
宝玉的分享
宝玉的分享
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
T
Tailwind CSS Blog
Vercel News
Vercel News
H
Help Net Security
博客园 - Franky
D
DataBreaches.Net
aimingoo的专栏
aimingoo的专栏

回忆中的明天

自己写一个Web 端的MiMo TTS Chat,方便实现文本转语音,API限免中 · 回忆中的明天 NVIDIA NIM 开发平台,提供超多免费大模型 · 回忆中的明天 iTranslation 简单快捷的翻译软件,支持数十种语言互译 · 回忆中的明天 国内外免费大模型平台,支持 API 调用的超多免费大模型 · 回忆中的明天 SiliconFlow 硅基流动一站式大模型云服务平台,提供超多免费大模型 · 回忆中的明天 Xiaomi MiMo 小米大模型团队开发的大语言模型,开源限免中…… · 回忆中的明天 BigModel 智谱大模型开放平台,提供超多自研免费大模型 · 回忆中的明天 OpenRouter 模型聚合平台,提供超多免费模型使用 · 回忆中的明天 iReader 英语点读学习系统,译林小学英语在线点读 · 回忆中的明天 ZenMux 企业级大模型聚合平台,提供免费试用模型 Gemini 3 Pro · 回忆中的明天 英语学习,新概念英语在线点读、全文朗读学习系统 · 回忆中的明天 iGSTT(Gemini STT) 开源免费的语音转文本(STT)的命令行工具 · 回忆中的明天 Python 项目打包,并上传到 PyPI,分享项目 · 回忆中的明天 iGTTS(Gemini TTS) 开源免费的文本转语音(TTS)的命令行工具 · 回忆中的明天 iChat(AI Chat) 智能聊天工具,支持 MiMo、DeepSeek、Gemini、Grok、OpenAI和自定义AI · 回忆中的明天 NanoPi R2S 安装 Debian 固件系统,旁路由网络代理内网转发,决解直连网络卡顿 nftables · 回忆中的明天 NanoPi R2S Armbian Linux 旁路由网络代理内网转发,决解直连网络卡顿 iptables · 回忆中的明天 sing-box rule-set · 回忆中的明天 Xcode 最全最实用的快捷键列表 · 回忆中的明天 SwiftUI 中的@State、@Bindable和@Binding · 回忆中的明天 免费的图床服务器-GitHub Pages · 回忆中的明天 A Free Native Image Uploading Tool for macOS · 回忆中的明天 免费的图床服务器-Cloudflare-R2 · 回忆中的明天 图传 (iUploader) - macOS 免费原生图床上传利器 · 回忆中的明天 本地无法加载托管到Cloudflare中的图片等资源,权限错误403 · 回忆中的明天 国内、外免费公共的DNS,支持的DoH,防止污染、篡改的问题 · 回忆中的明天 macOS 系统下载和安装 · 回忆中的明天 使用 CURL 命令调试和诊断网络问题,网站请求测速 · 回忆中的明天 WARP Beta for macOS 支持新协议 MASQUE · 回忆中的明天 2024年自用国外靠谱的 VPS 服务器推荐 · 回忆中的明天
Spring 为 RESTful Web 服务启用跨域请求 · 回忆中的明天
2021-07-15 · via 回忆中的明天

原文:https://ichochy.com/posts/spring/20210715.html


为服务指定 origins 配置,在响应中包含跨域资源共享 (CORS) 标头, 启用跨域请求

开发工具

  • IDEA: 2021.1.2
  • Java: 1.8
  • Spring Boot: 2.5

创建项目

参照《Spring 构建 RESTful Web 服务 Hello Worldhttps://ichochy.com/posts/20210615.html

项目目录

├── pom.xml
└── src
    └── main
        └── java
            └── com
                └── ichochy
                    └── example
                        ├── ExampleApplication.java
                        └── restful
                            ├── Greeting.java
                            ├── RequsetService.java
                            └── RESTFulController.java

启用 CORS

您可以从单个控制器或全局启用跨域资源共享 (CORS):

  • 控制器配置 CORS
  • 全局配置 CORS

控制器中配置 CORS

为了使 RESTful Web 服务在其响应中包含 CORS 访问控制标头,可以在控制器或方法添加注释 @CrossOrigin,启用 CORS,在RESTFulController中添加

控制器添加注解 @CrossOrigin

当前类中所有方法启用跨域资源共享 (CORS)

@CrossOrigin(origins = "https://ichochy.com")
@RestController
public class RESTFulController {
    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }
}

方法添加注解 @CrossOrigin

当前方法启用跨域资源共享 (CORS)

    @CrossOrigin(origins = "https://ichochy.com")
    @GetMapping("/greeting")
    public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
        return new Greeting(counter.incrementAndGet(), String.format(template, name));
    }

全局配置 CORS

通过 WebMvcConfigurer,自定义配置 CORS,统一管理,在RequsetService中添加

    @Bean
    public WebMvcConfigurer corsConfigurer() {
        return new WebMvcConfigurer() {
            @Override
            public void addCorsMappings(CorsRegistry registry) {
                registry.addMapping("/greeting").allowedOrigins("https://ichochy.com");
            }
        };
    }

@CrossOrigin 属性说明

  • origins 允许跨域请求的源列表
  • methods 支持的 HTTP 请求方法列表
  • allowedHeaders 实际请求中允许的请求头列表
  • exposedHeaders 用户代理中允许客户端响应头列表
  • allowCredentials 浏览器是否响应发送凭据
  • maxAge 缓存持续时间的最长期限

运行项目

Dubug 运行项目

main 方法启动项目

/*
 * Copyright (c) 2021 iChochy
 * URL:https://ichochy.com
 * Date:2021/06/09 22:07:09
 */

package com.ichochy.example;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class ExampleApplication {

    public static void main(String[] args) {
        SpringApplication.run(ExampleApplication.class, args);
    }
}

服务默认端口号为8080

162314892348552510

访问测试

访问:http://localhost:8080/greeting

{"id":1,"content":"Hello, World!"}

跨域访问测试

在网站(https://ichochy.com)上 Ajax 跨域访问当前接口,没有出现跨域问题,可以正常访问

Response Headers

Access-Control-Allow-Origin: https://ichochy.com

返回信息

{"id":1,"content":"Hello, World!"}

总结

如果没有添加 @CrossOrigin,会出现如下错误信息:

Access to XMLHttpRequest at ‘http://localhost:8080/greeting’ from origin ‘https://ichochy.com’ has been blocked by CORS policy: No ‘Access-Control-Allow-Origin’ header is present on the requested resource.

添加注解@CrossOrigin,启用跨域资源共享 (CORS)。默认支持所有域名跨域访问当前接口,通过注解属性origins可以指定一个或多个域名地址

//默认,所用域名都可访问
@CrossOrigin
//单个域名
@CrossOrigin(origins = "https://ichochy.com")
//多个域名
@CrossOrigin(origins = {"https://ichochy.com","http://localhost:8888"})

GitHub

https://github.com/iChochy/Example

引用