⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 checkreverseproxyheaderstest.java

📁 jetty SERVER連接資料庫用的軟體
💻 JAVA
字号:
//========================================================================//Copyright 2004-2008 Mort Bay Consulting Pty. Ltd.//------------------------------------------------------------------------//Licensed under the Apache License, Version 2.0 (the "License");//you may not use this file except in compliance with the License.//You may obtain a copy of the License at //http://www.apache.org/licenses/LICENSE-2.0//Unless required by applicable law or agreed to in writing, software//distributed under the License is distributed on an "AS IS" BASIS,//WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.//See the License for the specific language governing permissions and//limitations under the License.//========================================================================package org.mortbay.jetty;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import junit.framework.TestCase;import org.mortbay.jetty.handler.AbstractHandler;/** * Test {@link AbstractConnector#checkForwardedHeaders(org.mortbay.io.EndPoint, Request)}. */public class CheckReverseProxyHeadersTest extends TestCase{    Server server=new Server();    LocalConnector connector=new LocalConnector();    /**     * Constructor for CheckReverseProxyHeadersTest.     * @param name test case name.     */    public CheckReverseProxyHeadersTest(String name)    {        super(name);    }        public void testCheckReverseProxyHeaders() throws Exception    {        // Classic ProxyPass from example.com:80 to localhost:8080        testRequest("Host: localhost:8080\n" +                    "X-Forwarded-For: 10.20.30.40\n" +                    "X-Forwarded-Host: example.com", new RequestValidator()        {            public void validate(HttpServletRequest request)            {                assertEquals("example.com", request.getServerName());                assertEquals(80, request.getServerPort());                assertEquals("10.20.30.40", request.getRemoteAddr());                assertEquals("10.20.30.40", request.getRemoteHost());                assertEquals("example.com", request.getHeader("Host"));            }        });                // ProxyPass from example.com:81 to localhost:8080        testRequest("Host: localhost:8080\n" +                    "X-Forwarded-For: 10.20.30.40\n" +                    "X-Forwarded-Host: example.com:81\n" +                    "X-Forwarded-Server: example.com", new RequestValidator()        {            public void validate(HttpServletRequest request)            {                assertEquals("example.com", request.getServerName());                assertEquals(81, request.getServerPort());                assertEquals("10.20.30.40", request.getRemoteAddr());                assertEquals("10.20.30.40", request.getRemoteHost());                assertEquals("example.com:81", request.getHeader("Host"));            }        });                // Multiple ProxyPass from example.com:80 to rp.example.com:82 to localhost:8080        testRequest("Host: localhost:8080\n" +                    "X-Forwarded-For: 10.20.30.40, 10.0.0.1\n" +                    "X-Forwarded-Host: example.com, rp.example.com:82\n" +                    "X-Forwarded-Server: example.com, rp.example.com", new RequestValidator()        {            public void validate(HttpServletRequest request)            {                assertEquals("example.com", request.getServerName());                assertEquals(80, request.getServerPort());                assertEquals("10.20.30.40", request.getRemoteAddr());                assertEquals("10.20.30.40", request.getRemoteHost());                assertEquals("example.com", request.getHeader("Host"));            }        });    }    private void testRequest(String headers, RequestValidator requestValidator) throws Exception    {        Server server = new Server();        LocalConnector connector = new LocalConnector();                // Activate reverse proxy headers checking        connector.setForwarded(true);                server.setConnectors(new Connector[] {connector});        ValidationHandler validationHandler = new ValidationHandler(requestValidator);        server.setHandler(validationHandler);                try        {            server.start();            connector.getResponses("GET / HTTP/1.1\n" + headers + "\n\n");                        Error error = validationHandler.getError();                        if (error != null)            {                throw error;            }        }        finally        {            server.stop();        }    }    /**     * Interface for validate a wrapped request.     */    private static interface RequestValidator    {        /**         * Validate the current request.         * @param request the request.         */        void validate(HttpServletRequest request);    }    /**     * Handler for validation.     */    private static class ValidationHandler extends AbstractHandler    {        private RequestValidator _requestValidator;        private Error _error;                /**         * Create the validation handler with a request validator.         * @param requestValidator the request validator.         */        public ValidationHandler(RequestValidator requestValidator)        {            _requestValidator = requestValidator;        }                /**         * Retrieve the validation error.         * @return the validation error or <code>null</code> if there was no error.         */        public Error getError()        {            return _error;        }                public void handle(String target, HttpServletRequest request, HttpServletResponse response, int dispatch) throws IOException, ServletException        {            try            {                _requestValidator.validate(request);            }            catch (Error e)            {                _error = e;            }            catch (Throwable e)            {                _error = new Error(e);            }        }    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -