You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Word Web加载项调用跨域Java REST API遇权限拒绝错误求助

解决Word Web加载项向Java API发送POST请求的CORS错误

你遇到的SCRIPT7002: XMLHttpRequest: Network Error 0x80070005, Access is denied和Redirect for CORS preflight is not allowed问题,核心原因是CORS预请求(OPTIONS请求)被服务器重定向了——浏览器对CORS预请求有严格限制,不允许其被重定向,一旦发生就会直接阻断请求并抛出错误。结合你的场景,我给你一步步的解决方案:

1. 修复服务器端的CORS配置(最关键)

首先要确保Java API服务器正确处理CORS预请求,并且不会对OPTIONS请求进行重定向:

针对Spring Boot后端的示例配置

如果你的Java API是基于Spring Boot的,可以通过全局CORS配置来解决:

@Configuration
public class CorsConfig implements WebMvcConfigurer {
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/web/check/**")
                // 允许Word加载项所在的域(测试阶段可用*,生产环境请指定具体域)
                .allowedOrigins("https://localhost:3000", "https://your-addin-domain.com")
                .allowedMethods("GET", "POST", "OPTIONS")
                .allowedHeaders("*")
                // 允许携带凭证(如果请求需要Cookie等信息)
                .allowCredentials(true)
                // 预请求缓存时间,减少OPTIONS请求次数
                .maxAge(3600);
    }
}

另外,要检查服务器是否有全局重定向规则(比如HTTP转HTTPS、URL末尾斜杠自动修正),必须排除OPTIONS请求的重定向。比如在Nginx配置里可以添加:

if ($request_method = OPTIONS) {
    return 200;
}

2. 调整AJAX请求配置

你的现有AJAX配置有几个潜在问题,修改如下:

$.ajax({
    async: true, // 同步请求(async: false)在现代浏览器和Office加载项沙盒中会被安全策略限制,必须用异步
    crossDomain: true, // 跨域场景必须明确设为true
    url: "https://qa.dev.com:8443/web/check", // 去掉末尾斜杠,避免服务器重定向到无斜杠版本
    method: "POST",
    data: d,
    contentType: "application/x-www-form-urlencoded", // 表单数据用这个;如果是JSON数据,改成"application/json"并转data为JSON字符串
    // 若发送JSON数据,替换为以下两行:
    // data: JSON.stringify(d),
    // contentType: "application/json",
    xhrFields: {
        withCredentials: true // 需要携带Cookie等凭证时添加
    },
    success: function(response) {
        // 处理成功响应逻辑
    },
    error: function(xhr, status, error) {
        console.error("请求错误:", status, error);
    }
});

重点说明:

  • 同步请求在Office Web加载项环境中容易触发安全限制,务必改为异步。
  • crossDomain: true要明确设置,因为你是从Word加载项的域请求外部Java API,属于跨域场景。
  • 检查URL末尾的斜杠:如果服务器会自动把带斜杠的URL重定向到无斜杠版本,会直接触发预请求的重定向错误,要确保URL和服务器期望的一致。

3. 配置Word加载项的Manifest文件

Office Web加载项有自己的域访问限制,必须在manifest.xml中声明允许访问的外部API域名:

<Resources>
    <bt:Urls>
        <!-- 加载项自身的URL -->
        <bt:Url id="Taskpane.Url" DefaultValue="https://your-addin-domain.com/taskpane.html" />
        <!-- 添加Java API的域名 -->
        <bt:Url id="ApiEndpoint" DefaultValue="https://qa.dev.com:8443" />
    </bt:Urls>
</Resources>
<!-- 确保权限设置符合需求 -->
<Permissions>ReadWriteDocument</Permissions>

如果API域名是动态的,也可以用Domain元素声明:

<Domains>
    <Domain>qa.dev.com</Domain>
</Domains>

4. 验证预请求状态

用Fiddler再次追踪请求,确保OPTIONS请求返回200状态码,并且响应头包含正确的CORS信息:

  • Access-Control-Allow-Origin:匹配你的加载项域名
  • Access-Control-Allow-Methods:包含POST方法
  • Access-Control-Allow-Headers:包含你请求中发送的所有自定义头(如果有的话)

按照以上步骤调整后,应该就能解决CORS相关的错误了。

内容的提问来源于stack exchange,提问作者Varsha Khanna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:07:44