spring - Pentaho j_spring_security_check 混合内容。HTTPS 到 HTTP
问题描述
我已经根据需要在 Tomcat 8.5 和 OpenJDK 1.8 上安装了 Pentaho (9.x)。在它前面是带有 mod_proxy_http 的 Apache 2.4。
我的网站使用 HTTPS 服务,并且我有以下代理规则:
RequestHeader set X-Forwarded-Proto "https"
ProxyPreserveHost on
ProxyPass "/pentaho" "http://tomcat_host_ip:8080/pentaho"
ProxyPassReverse "/pentaho" "http://tomcat_host_ip:8080/pentaho"
ProxyPass "/pentaho/" "http://tomcat_host_ip:8080/pentaho/"
ProxyPassReverse "/pentaho/" "http://tomcat_host_ip:8080/pentaho/"
ProxyPass "/pentaho/Login" "http://tomcat_host_ip:8080/pentaho/Login"
ProxyPassReverse "/pentaho/Login" "http://tomcat_host_ip:8080/pentaho/Login"
当我尝试在 POST 期间登录时出现错误: https ://pentaho.mywebsite.org/pentaho/j_spring_security_check
应用程序尝试使用 HTTP 协议而不是 HTTPS 进行响应。
在请求标头中,我有正确的引用者和来源:来源:https : //pentaho.mywebsite.org 引用者:https ://pentaho.mywebsite.org/pentaho/Login
但响应标头回复 HTTP 而不是 https:位置http://pentaho.mywebsite.org/pentaho/
解决方案
我解决了这个问题,只需将 proxyPort="443" 和 scheme="https" 添加到我在 Tomcat 中的 http 连接器。
规则
RequestHeader set X-Forwarded-Proto "https"
在 Apache 上没有用。这是我正确的 Apache 配置
ProxyPreserveHost on
ProxyPass "/pentaho" "http://tomcat_host_ip:8080/pentaho"
ProxyPassReverse "/pentaho" "http://tomcat_host_ip:8080/pentaho"
ProxyPass "/pentaho/" "http://tomcat_host_ip:8080/pentaho/"
ProxyPassReverse "/pentaho/" "http://tomcat_host_ip:8080/pentaho/"
这是我的 Tomcat HTTP 连接器
<Connector URIEncoding="UTF-8"
port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
proxyPort="443"
scheme="https"
redirectPort="8443"
relaxedPathChars="[]|"
relaxedQueryChars="^{}[]|&"
maxHttpHeaderSize="65536"
/>
推荐阅读
- list - groovy 是否有内置的方式来遍历/转换数据结构?
- netbeans-8 - Netbeans 8.0.2 更新后无法启动
- ubuntu - 运行 Airflow 时无法访问 localhost
- java - 尝试使用具有有效购买令牌的 Java Google Play Developer API v3 检索应用内购买信息时出现错误请求(无效值)
- javascript - SQLite (sql.js) 上的 DELETE 语句什么都不做
- csv - 在 java 中解析大型 CSV 文件的最快和最有效的方法
- node.js - 在 Express Web 应用程序中休息全面服务
- html - 用美汤提取网页内容
- java - 如何从 id 的标识符中获取字符串
- amazon-web-services - AWS Lambda + NAT 网关的替代方案