如何修复java web应用程序中JSP重定向中的HTTPS-HTTP混合内容错误
我使用的是一个DNS url(https),这是一个负载平衡器url,用于托管在Weblogic server中的web应用程序。当我在chrome中点击url时,我可以成功登录。然后,当我试图点击页面上的某个按钮时,比如某个查看/编辑按钮,没有响应。当我调试时,我发现这是由于chrome中的混合内容问题造成的。是的,我在IE和Firefox中没有遇到同样的问题 当我使用原始http url代替DNS url时,我没有任何问题 现在,我想在jsp中解决这个问题。但我不确定我需要做哪些代码更改 以下是我从网络跟踪中获得的URL:如何修复java web应用程序中JSP重定向中的HTTPS-HTTP混合内容错误,java,http,jsp,https,http-redirect,Java,Http,Jsp,Https,Http Redirect,我使用的是一个DNS url(https),这是一个负载平衡器url,用于托管在Weblogic server中的web应用程序。当我在chrome中点击url时,我可以成功登录。然后,当我试图点击页面上的某个按钮时,比如某个查看/编辑按钮,没有响应。当我调试时,我发现这是由于chrome中的混合内容问题造成的。是的,我在IE和Firefox中没有遇到同样的问题 当我使用原始http url代替DNS url时,我没有任何问题 现在,我想在jsp中解决这个问题。但我不确定我需要做哪些代码更改 以
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();
}
问题就在这里,由于混合内容,代码流无法到达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");
保持模式/参考,如下所示:
String scheme = request.getScheme();
String referer = request.getHeader("referer");
最好使用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");
}
我可能需要使用一个自定义过滤器,它可以帮助我将响应重定向到https。我正在努力写它。有一些有用的链接。让我试试。你解决这个问题了吗?我有一个类似的问题。是的,问题已经解决了。我将更新答案。@I.R:已添加答案。请现在检查。如果对你的情况有效(我不知道),请别忘了对答案投赞成票。
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");
}