如何解决Alfresco ADF与Activiti 6.0社区版的登录跨域问题?
解决ADF演示壳应用连接Activiti 6.0社区版的CORS登录问题
这个错误核心是跨域资源共享(CORS)限制——ADF运行在localhost:3000,而Activiti部署在localhost:9999,浏览器的同源策略会阻止跨端口的认证请求,除非Activiti所在的Tomcat服务器配置了允许跨域的响应头。结合Activiti 6.0社区版的特性,你可以按以下步骤修复:
1. 配置Tomcat的CORS过滤器
因为Activiti部署在Tomcat 8上,直接在Tomcat全局配置CORS是最有效的方式:
- 打开Tomcat安装目录下的
conf/web.xml文件 - 在文件末尾的
</web-app>标签之前,添加以下CORS过滤器配置:
<filter> <filter-name>CorsFilter</filter-name> <filter-class>org.apache.catalina.filters.CorsFilter</filter-class> <init-param> <param-name>cors.allowed.origins</param-name> <param-value>http://localhost:3000</param-value> </init-param> <init-param> <param-name>cors.allowed.methods</param-name> <param-value>GET,POST,HEAD,OPTIONS,PUT,DELETE</param-value> </init-param> <init-param> <param-name>cors.allowed.headers</param-name> <param-value>Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization</param-value> </init-param> <init-param> <param-name>cors.exposed.headers</param-name> <param-value>Access-Control-Allow-Origin,Access-Control-Allow-Credentials</param-value> </init-param> <init-param> <param-name>cors.support.credentials</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>CorsFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
- 保存文件后,重启Tomcat服务器。这个配置会允许来自
localhost:3000的跨域请求,并且支持携带认证凭证(这对登录请求至关重要)。
2. 验证Activiti应用的CORS配置
Activiti 6.0社区版的activiti-app本身也有CORS相关配置,需要确保和Tomcat的配置一致:
- 找到Tomcat中
webapps/activiti-app/WEB-INF/classes/activiti-app.properties文件 - 添加或修改以下配置项:
cors.enabled=true cors.allowed.origins=http://localhost:3000 cors.allowed.methods=GET,POST,HEAD,OPTIONS,PUT,DELETE cors.allowed.headers=Content-Type,X-Requested-With,accept,Origin,Access-Control-Request-Method,Access-Control-Request-Headers,Authorization cors.exposed.headers=Access-Control-Allow-Origin,Access-Control-Allow-Credentials cors.support.credentials=true
- 保存后重启Tomcat,确保Activiti应用加载新的配置。
3. 检查ADF演示壳应用的配置
确保ADF的配置指向正确的Activiti端点,并且启用了正确的认证方式:
- 打开ADF demo-shell的
src/app.config.json文件 - 确认
bpmHost配置为你的Activiti地址:
{ "ecmHost": "http://localhost:8080/alfresco", "bpmHost": "http://localhost:9999/activiti-app", "authType": "BASIC", "oauth2": { // 其他oauth配置可保留,但Activiti社区版更适配BASIC认证 } }
- 保存配置后,重启ADF应用(停止
npm start后重新运行)。
4. 验证修复效果
重启所有服务后,打开浏览器的开发者工具(F12),切换到Network标签,然后尝试在localhost:3000登录:
- 查看登录请求的响应头,确认包含
Access-Control-Allow-Origin: http://localhost:3000和Access-Control-Allow-Credentials: true - 如果请求成功,就能正常进入ADF的APS相关页面了。
如果还是有问题,可以检查开发者工具的Console标签,看具体的CORS错误提示,比如是否是Origin不匹配,或者凭证未被允许,再针对性调整配置。
内容的提问来源于stack exchange,提问作者ace
相关产品推荐
相关产品推荐

