开发可以处理HTTPS连接的代理servlet

时间:2012-02-05 15:51:59

标签: java servlets https

我开发了一个Java servlet,它可以代理来自浏览器的HTTP请求。 我遇到了代理HTTPS请求的问题 servlet似乎没有从浏览器接收任何HTTPS请求 在进一步研究之后,我注意到HTTP请求似乎以简单的GET请求开始,而HTTPS请求以CONNECT请求开始,如下面的日志提取所示:

"CONNECT ajax.googleapis.com:443 HTTP/1.1" 200

我的问题是,是否可以使用我的servlet处理此请求?

public class MyProxyServlet extends HttpServlet {
    @Override
    public void init(final ServletConfig config) throws ServletException {
        super.init(config);
    }

    @Override
    protected void doGet(final HttpServletRequest request,
            final HttpServletResponse response) throws ServletException,
            IOException {
    }

    @Override
    protected void doPost(final HttpServletRequest request,
            final HttpServletResponse response) throws ServletException,
            IOException {
    }
}

若在何处以及如何?

2 个答案:

答案 0 :(得分:1)

由于默认HttpServlet实现不处理CONNECT谓词,因此您必须覆盖servlet中Service的{​​{1}}方法并处理javax.servlet.http.HttpServlet方法自己。最初的实现似乎忽略了这个CONNECT。看一下HttpServlet源代码http://www.docjar.com/html/api/javax/servlet/http/HttpServlet.java.html

答案 1 :(得分:0)

通常,HTTPS握手和交换由servlet容器和浏览器处理。对于servlet,它不需要知道模式是什么。您必须在服务器的配置中定义正确的连接器以侦听HTTPS,并且不需要在Web应用程序或servlet端进行任何额外的操作。无论是通过http://还是https://访问,servlet的请求都是相同的。仅需要将服务器配置为接受https://