如何修复 Java Web 应用程序中 JSP 重定向中的 HTTPS-HTTP 混合内容错误
Posted
技术标签:
【中文标题】如何修复 Java Web 应用程序中 JSP 重定向中的 HTTPS-HTTP 混合内容错误【英文标题】:How to fix HTTPS-HTTP mixed content error in JSP redirection in a java web application 【发布时间】:2020-10-07 14:34:41 【问题描述】:我正在使用 DNS url (https),它是我的 Web 应用程序的负载平衡器 url,它托管在 Weblogic 服务器中。当我在 chrome 中点击 url 时,我可以成功登录。然后,当我尝试单击页面上的某个按钮时,比如说某个查看/编辑按钮,没有响应。当我调试时,我发现这是由于 chrome 中的混合内容问题。是的,我在 IE 和 Firefox 中没有任何问题。
当我使用原始 http url 而不是 DNS url 时,我没有问题。
现在,我想在我的 jsp 中解决这个问题。但我不确定我需要进行哪些代码更改。
以下是我从网络跟踪中获得的 URL:
Console URL : https://dns-host/myapp/console.jsp
Request URL : https://dns-host/myapp/editWorkSelector.jsp?workid=1234©work=view
Referer : https://dns-host/myapp/workDataScr.jsp?workname=null
Location : http://dns-host/myapp/workView.jsp
我正在尝试在我的代码中使用 workView.jsp。在这里我遇到了问题,无法访问该页面。
这是一个示例代码:
文件:workDataScr.jsp
<td align="center" bgcolor="<%=bgcolor%>">
<a href="editWorkSelector.jsp?workid=<%=id%>©work=view"
onClick="return checkForSystem(this.form,'<%=id%>','<%=type%>','<%=role%>')">VIEW
</a>
</td>
function checkForSystem(form,workid,worktype,role)
form = document.forms[1];
form.action="editWorkSelector.jsp?workid="+workid+"&type="+worktype;
form.submit();
文件:editWorkSelector.jsp
String workid = request.getParameter("workid");
String copy = (String)request.getParameter("copywork");
String workname = (String)request.getParameter("workname");
WorkData work = workBean.getWork(workid);
response.sendRedirect("workView.jsp");
问题出在这里,由于内容混合,代码流无法到达 workView.jsp。
错误:
Mixed Content: The page at 'https://dns-host/myapp/console.jsp' was loaded over HTTPS,
but requested an insecure resource 'http://dns-host/myapp/workView.jsp'.
This request has been blocked; the content must be served over HTTPS.
enter code here
了解如何在我的代码中解决此问题将非常有帮助。
【问题讨论】:
我可能需要使用自定义过滤器来帮助我将响应重定向到 https。我正在尝试写它。得到了一些有用的链接。让我试试。 这个问题你解决了吗?我也有类似的问题。 是的,问题已解决。我会更新答案。 @I.R. : 答案已添加。请立即检查。如果它适用于您的情况[我不知道],请不要忘记为答案投票。 【参考方案1】:在执行以下行之前,我们需要根据条件正确重定向请求。
response.sendRedirect("workView.jsp");
如下所示保存架构/引荐来源网址:
String scheme = request.getScheme();
String referer = request.getHeader("referer");
最好使用引荐来源网址,因为架构并不总是能提供所需的结果。您可以在控制台调试器中检查该值。
然后在这样的条件下执行重定向:
String servername = request.getServerName();
String scheme = request.getScheme();
String referer = request.getHeader("referer");
if(referer.startsWith("https"))
response.sendRedirect("https://" + servername + "/context-root/" + "workView.jsp");
else
response.sendRedirect("workView.jsp");
【讨论】:
以上是关于如何修复 Java Web 应用程序中 JSP 重定向中的 HTTPS-HTTP 混合内容错误的主要内容,如果未能解决你的问题,请参考以下文章
java WEB如何创建response,从而进行页面重定向