如何修复 java 网络应用程序中 JSP 重定向中的 HTTPS-HTTP 混合内容错误

How to fix HTTPS-HTTP mixed content error in JSP redirection in a java web application

我正在使用 DNS url (https),​​这是一个负载平衡器 url,用于托管在 Weblogic 服务器中的 Web 应用程序。当我在 chrome 中点击 url 时,我可以成功登录。然后当我试图点击页面上的某个按钮时,说一些 view/edit 按钮,没有任何反应。当我调试时,我发现这是由于 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

知道如何在我的代码中解决这个问题会很有帮助。

我们需要在执行以下行之前正确地根据条件重定向请求。

response.sendRedirect("workView.jsp");

按住 schema/referrer 如下所示:

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");
}