Java 我是否需要在同一实例上的webapp和webservice中进行HTTPS通信?

Java 我是否需要在同一实例上的webapp和webservice中进行HTTPS通信?,java,web-services,http,https,Java,Web Services,Http,Https,我在服务器实例上部署了一个web服务。在同一个实例中,我们还有一个webapp,它使用这个web服务,并且是最终用户的前端 由于两者都在同一个服务器实例上,并且通信是本地的,我想知道使用HTTPS是否会造成开销?如果您的web服务是“本地”的,即不是面向公众的,并且绑定到环回接口(或更类似于本地网络接口),使用HTTPS将是相当大的开销,没有明显的理由(因为它需要做“更多”的工作) 我们有一个类似的体系结构,但是我们没有使用HTTP,而是使用RMI来获得更好的性能。它提供二进制传输,而不是文本协

我在服务器实例上部署了一个web服务。在同一个实例中,我们还有一个webapp,它使用这个web服务,并且是最终用户的前端

由于两者都在同一个服务器实例上,并且通信是本地的,我想知道使用HTTPS是否会造成开销?

如果您的web服务是“本地”的,即不是面向公众的,并且绑定到环回接口(或更类似于本地网络接口),使用HTTPS将是相当大的开销,没有明显的理由(因为它需要做“更多”的工作)


我们有一个类似的体系结构,但是我们没有使用HTTP,而是使用RMI来获得更好的性能。它提供二进制传输,而不是文本协议,更不用说免费提供的自动编组解组。如果您担心可移植性,那么从长远来看,使用另一种高效的协议(如protobuffers)可能会有所帮助。尽管我确信这些东西不适用于您的情况,因为您没有提及任何关于离开HTTP服务的内容。

是的,在同一台服务器上,HTTPS只会增加开销。可以通过HTTP进行通信

如果web服务服务器实例未向外界公开,则可以完全禁用HTTPS侦听器

如果此web服务服务器暴露于外部世界,则可以编写一个筛选器,将来自外部的http请求重定向到https

以下是过滤器的外观:

public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException
{
    HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
    HttpServletResponse httpResponse = (HttpServletResponse) servletResponse;        
    if(httpRequest.isSecure() || isHostAllowed(servletRequest.getRemoteHost()) ){
        filterChain.doFilter(servletRequest, servletResponse);
    } else{
        String url  = "https://"+servletRequest.getServerName() + "/" + httpRequest.getRequestURI();
        httpResponse.sendRedirect(url);
    }
}

谢谢没错,Sanjay,我们没有离开HTTP的选择,因为我们有很多只支持HTTP的客户端:)它实际上是对外开放的。我认为我们需要找到一种方法,允许本地呼叫使用HTTP,其他呼叫使用HTTPS。您只需从呼叫方发出HTTP请求。就这样,谢谢!好的,您的意思是我们必须编写一个实现
javax.servlet.Filter
接口的过滤器,还是可以配置
web.xml
中的
标记来实现这一点?因为只有当HTTPS来自外部时,我们才需要重定向到HTTPS。我们需要编写实现javax.servlet.filter的过滤器。它允许来自HTTP和本地计算机的请求(可以使用HttpServletRequest.getRemoteHost()识别)。否则,将请求重定向到HTTPS端口。