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

CORS问题:Keycloak保护React与JAX-RS服务时的跨域报错如何解决?

修复方案

1. 修复Axios请求头格式错误

你在Axios拦截器中拼接Authorization头时缺少空格,会导致Token格式错误,Keycloak鉴权失败:
原代码:

config.headers['Authorization'] = 'Bearer' + token;

修改为:

config.headers['Authorization'] = 'Bearer ' + token;

2. 修正CORS过滤器配置

Access-Control-Allow-Credentials参数不能设为*,必须显式指定为true,否则浏览器会拒绝带身份凭证的跨域请求:
原过滤器代码:

cres.getHeaders().add("Access-Control-Allow-Credentials", "*");

修改为:

cres.getHeaders().add("Access-Control-Allow-Credentials", "true");

3. 配置CORS过滤器优先执行+放行OPTIONS请求

你遇到的CORS错误本质是受保护接口的鉴权失败响应没有携带CORS头:因为Keycloak的鉴权过滤器执行顺序在你的自定义CORS过滤器之前,当Token无效/预检请求(OPTIONS请求不带Authorization头)被Keycloak拦截时,响应直接返回,不会走到你的CORS过滤器添加响应头。
需要在web.xml中添加如下配置:

<!-- 注册CORS过滤器 -->
<filter>
    <filter-name>CORSFilter</filter-name>
    <filter-class>你的CORS过滤器全类名</filter-class>
</filter>
<filter-mapping>
    <filter-name>CORSFilter</filter-name>
    <url-pattern>/*</url-pattern>
    <!-- 配置过滤器优先执行 -->
    <dispatcher>REQUEST</dispatcher>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

<!-- 放行所有OPTIONS请求的鉴权 -->
<security-constraint>
    <web-resource-collection>
        <web-resource-name>OPTIONS Preflight</web-resource-name>
        <url-pattern>/*</url-pattern>
        <http-method>OPTIONS</http-method>
    </web-resource-collection>
    <!-- 无auth-constraint代表所有用户都可访问 -->
</security-constraint>

4. 配置Wildfly信任Keycloak自签名证书

你的Keycloak使用自签名HTTPS证书,Wildfly默认不信任该证书,会导致Keycloak适配器验证Token时失败,返回无CORS头的错误响应。你需要将Keycloak的自签名证书导入Wildfly运行使用的JDK信任库中:

# 示例命令,替换对应路径和别名
keytool -import -alias keycloak-cert -file 你的keycloak自签名证书路径.crt -keystore $JAVA_HOME/jre/lib/security/cacerts
# 默认信任库密码为 changeit

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 07:06:03