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

Jersey中'Access-Control-Allow-Origin'请求头被编码问题咨询

解决Jersey HK2过滤器中Access-Control-Allow-Origin头被编码的问题

你必须修改现有实现——编码后的Access-Control-Allow-Origin不符合CORS规范,浏览器会判定跨域请求无效,导致前端出现CORS错误。

问题原因

你直接将请求头的Origin值设置到响应头时,Jersey HK2的处理环节(或过滤器链中的其他组件)自动对非字母数字字符进行了URL编码,导致响应头中的值无法与请求的Origin匹配。

解决方案

有两种可靠的修改方式:

方式一:手动解码Origin值后设置响应头

在设置响应头前,对获取到的Origin值进行URL解码,确保响应头使用原始的未编码字符串:

import java.net.URLDecoder;
import java.nio.charset.StandardCharsets;

// ...
final String origin = httpRequest.getHeader("origin");
// 解码Origin值,避免编码后的响应头
String decodedOrigin = URLDecoder.decode(origin, StandardCharsets.UTF_8.name());
httpResponse.addHeader("Access-Control-Allow-Origin", decodedOrigin);

方式二:使用Jersey官方CorsFilter组件

替换自定义过滤器为Jersey自带的CorsFilter,它会自动正确处理CORS相关头,避免编码问题:

import org.glassfish.jersey.server.filter.CorsFilter;

// 在Jersey的资源配置中注册CorsFilter
CorsFilter corsFilter = new CorsFilter();
// 可配置允许的Origin(按需设置,也可允许所有)
corsFilter.getAllowedOrigins().add("https://example.com:8443");
// 可选:配置允许的HTTP方法、请求头等
register(corsFilter);

验证

修改完成后重新测试跨域请求,在Chrome开发者工具中检查响应头的Access-Control-Allow-Origin值,确认与请求头的Origin完全一致(未编码)即可。

内容的提问来源于stack exchange,提问作者Darshan Mehta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 02:13:15