如何修复 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&copywork=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%>&copywork=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,从而进行页面重定向

java web中jsp常用标签

[Java][Web] Servlet中转发和重定向比较

Java Servlets / JSP-如何从Java页面将用户重定向到JSP网页?

如何使用modelandview进行重定向

Servlet 不重定向到 JSP 页面