You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何让Alfresco ADF 2适配社区版5.2?CORS错误求助

问题解答:ADF Demo-Shell 登录CORS错误与社区版兼容性

首先明确:Alfresco社区版完全支持ADF,你遇到的问题和使用社区版无关,核心是CORS配置有误,加上Demo-Shell的README文档过时导致配置文件找错了,下面一步步解决:

一、先搞定Alfresco Repository的CORS配置

不管是5.2社区版还是6.0 EA社区版,都需要开启并正确配置CORS:

1. 针对Alfresco 5.2社区版(传统Tomcat部署)

  • 找到Tomcat目录下的 tomcat/webapps/alfresco/WEB-INF/web.xml,在现有过滤器之前添加CORS过滤器配置:
<filter>
    <filter-name>CORS</filter-name>
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class>
    <init-param>
        <param-name>cors.allowOrigin</param-name>
        <param-value>http://localhost:4200</param-value> <!-- 测试阶段可用*,生产环境建议指定具体ADF地址 -->
    </init-param>
    <init-param>
        <param-name>cors.supportedMethods</param-name>
        <param-value>GET, POST, HEAD, PUT, DELETE, OPTIONS</param-value>
    </init-param>
    <init-param>
        <param-name>cors.supportedHeaders</param-name>
        <param-value>Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization</param-value>
    </init-param>
    <init-param>
        <param-name>cors.exposedHeaders</param-name>
        <param-value>Authorization</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>CORS</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  • 检查 tomcat/webapps/alfresco/WEB-INF/lib 目录下是否有 cors-filter-x.x.x.jarjava-property-utils-x.x.x.jar,如果没有,需要下载对应版本的jar包放入该目录。
  • 重启Alfresco服务。

2. 针对Alfresco 6.0 EA社区版(Docker部署)

如果用官方Docker镜像,直接通过环境变量或配置文件开启CORS:

  • 方式一:修改docker-compose.yml添加环境变量:
services:
  alfresco:
    image: alfresco/alfresco-content-repository-community:6.0.0-EA
    environment:
      - REPO_CORS_ENABLED=true
      - REPO_CORS_ALLOWED_ORIGINS=http://localhost:4200
      - REPO_CORS_SUPPORTED_METHODS=GET,POST,HEAD,PUT,DELETE,OPTIONS
      - REPO_CORS_SUPPORTED_HEADERS=Origin,Accept,X-Requested-With,Content-Type,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization
      - REPO_CORS_EXPOSED_HEADERS=Authorization
  • 方式二:修改alfresco-global.properties文件添加:
cors.enabled=true
cors.allowOrigin=http://localhost:4200
cors.supportedMethods=GET, POST, HEAD, PUT, DELETE, OPTIONS
cors.supportedHeaders=Origin, Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers, Authorization
cors.exposedHeaders=Authorization
  • 重启容器生效。

二、修正ADF Demo-Shell的配置(README文档过时,不用找webpack.common.js)

ADF 2的Demo-Shell已经不再使用config/webpack.common.js,而是用环境配置文件和代理配置:

  1. 修改环境配置:找到项目中的 src/environments/environment.ts,把ecmHost改成你的Alfresco Repository地址:
export const environment = {
  production: false,
  ecmHost: 'http://your-alfresco-server:8080', // 替换成你的Alfresco地址,比如http://localhost:8080
  bpmHost: 'http://your-alfresco-server:8080/activiti-app', // 没用Activiti可留空或注释
  // 其他配置保持默认即可
};
  1. 配置代理(可选但推荐,测试场景可绕开Alfresco端CORS配置)
  • 在项目根目录创建proxy.conf.json文件:
{
  "/alfresco": {
    "target": "http://your-alfresco-server:8080",
    "secure": false,
    "changeOrigin": true
  },
  "/activiti-app": {
    "target": "http://your-alfresco-server:8080",
    "secure": false,
    "changeOrigin": true
  }
}
  • 修改package.json中的start脚本,添加代理配置:
"scripts": {
  "start": "ng serve --proxy-config proxy.conf.json",
  // 其他脚本不变
}
  • 重新执行npm start,此时ADF的请求会通过代理转发,避开CORS限制。

三、验证配置是否生效

  • 打开浏览器开发者工具的「Network」标签,尝试登录ADF,查看OPTIONS请求的响应头:
    • 确认Access-Control-Allow-Origin的值包含你的ADF应用地址(比如http://localhost:4200
    • 确认Access-Control-Allow-Methods包含所有需要的请求方法
  • 如果还是报错,检查浏览器控制台的具体错误信息,比如是否是请求头里的某个字段没被Alfresco的CORS配置允许,或者Alfresco服务没正确重启。

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

火山引擎 最新活动