如何让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.jar和java-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,而是用环境配置文件和代理配置:
- 修改环境配置:找到项目中的
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可留空或注释 // 其他配置保持默认即可 };
- 配置代理(可选但推荐,测试场景可绕开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




