如何解决Liferay 7.4.2 CE版本中URL重定向被禁止导致工作流无法编辑的问题?
我之前处理过类似的Liferay反向代理场景下的安全重定向问题,结合你的情况,给你两个方向的解决方案,先从Apache配置入手,再搭配Liferay 7.4的新属性设置,应该能解决工作流组件不显示的问题。
一、Apache反向代理层面的关键配置
首先要确保Apache正确将用户访问的真实协议、主机名和端口传递给后端的Tomcat/Liferay,否则Liferay会认为重定向请求来自不安全的来源。
启用必要的Apache模块:
确保你的Apache已经启用了mod_proxy、mod_proxy_http和mod_headers模块,Debian/Ubuntu系统可以通过以下命令启用:a2enmod proxy proxy_http headers配置SSL虚拟主机的反向代理规则:
修改你的Apache SSL站点配置文件(通常在/etc/apache2/sites-available/your-domain.conf),添加以下内容:<VirtualHost *:443> ServerName your-domain.com # 替换成你的实际域名 SSLEngine on SSLCertificateFile /path/to/your/certificate.pem SSLCertificateKeyFile /path/to/your/private-key.pem # 反向代理到Tomcat的8080端口 ProxyPass / http://localhost:8080/ ProxyPassReverse / http://localhost:8080/ # 传递真实的协议、主机和端口给Liferay RequestHeader set X-Forwarded-Proto "https" RequestHeader set X-Forwarded-Host "your-domain.com" RequestHeader set X-Forwarded-Port "443" </VirtualHost>重启Apache使配置生效:
systemctl restart apache2
二、Liferay 7.4.2的新属性配置(portal-ext.properties)
你提到旧的redirect.url.security.mode和redirect.url.domains.allowed已经弃用,Liferay 7.4改用了更精细的安全属性,同时需要开启信任反向代理传递的头信息:
开启反向代理头信任:
添加以下属性让Liferay信任Apache传递的X-Forwarded-*头:web.server.forwarded.host.enabled=true web.server.forwarded.port.enabled=true web.server.forwarded.protocol.enabled=true设置正确的服务器基础信息:
确保Liferay知道外部访问的真实协议、主机和端口:web.server.protocol=https web.server.host=your-domain.com # 替换成你的实际域名 web.server.https.port=443 portal.instance.protocol=https配置允许的重定向主机:
替代旧属性的新配置是portal.security.allowed.redirect.hosts,指定允许的重定向域名:portal.security.allowed.redirect.hosts=your-domain.com # 如果有多个域名需要允许,用逗号分隔: # portal.security.allowed.redirect.hosts=your-domain.com,www.your-domain.com重启Tomcat并清除缓存:
重启Tomcat后,最好清除Liferay的缓存(可以通过控制面板的「服务器管理」->「缓存」页面清理,或者手动删除Tomcat的work和temp目录),确保新配置生效。
验证
完成上述配置后,再次访问工作流控制面板,应该不会再出现Redirect URL is not allowed的警告,工作流的创建/编辑组件也会正常显示。
核心原因是:如果反向代理配置不正确,Liferay接收到的请求信息是来自localhost:8080,而用户实际访问的是https://your-domain.com,Liferay会认为这个重定向是跨域的不安全请求,从而阻止并隐藏相关组件。通过正确传递头信息和配置允许的重定向主机,就能解决这个问题。
内容的提问来源于stack exchange,提问作者dsorato

