Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复java web应用程序中JSP重定向中的HTTPS-HTTP混合内容错误_Java_Http_Jsp_Https_Http Redirect - Fatal编程技术网

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

如何修复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中解决这个问题。但我不确定我需要做哪些代码更改 以

我使用的是一个DNS url(https),这是一个负载平衡器url,用于托管在Weblogic server中的web应用程序。当我在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();
}
问题就在这里,由于混合内容,代码流无法到达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");
}