如何修复 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©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
知道如何在我的代码中解决这个问题会很有帮助。
我们需要在执行以下行之前正确地根据条件重定向请求。
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");
}
我正在使用 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©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
知道如何在我的代码中解决这个问题会很有帮助。
我们需要在执行以下行之前正确地根据条件重定向请求。
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");
}