有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java试图使用Tomcat构建网关,但来自chrome的请求被重定向到端点

我正在尝试在Tomcat中构建一个简单的网关,它将执行授权检查,并将请求重定向到不同的端点,该端点获取响应并将其发送回浏览器

在Tomcat中,我有一个简单的Servlet,它使用HttpURLConnection连接到端点,获取响应并将其发送回浏览器

然而,在Chrome中,我的URL总是被重定向到端点域。我在IE或Firefox中没有看到这种行为

例如,这是部署到主机名测试的。网关。通用域名格式。 如果我进行http请求测试。网关。com:9500/测试/索引。来自浏览器的html,Servlet应该发出http请求进行测试。终点。com/test/index。并返回响应。客户端浏览器应保持测试状态。网关。com:9500/测试/索引。html

但是在Chrome上,我的URL变为http://test.endpoint.com/test/index.html

在我的网上。xml我有URL映射,它调用这个servlet

代码如下:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.HttpURLConnection;
import java.net.URL;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class AppProxyServlet
 */
@WebServlet("/AppProxyServlet")
public class AppProxyServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    private static final String proxy = "http://test.endpoint.com";


    /**
     * @see HttpServlet#HttpServlet()
     */
    public AppProxyServlet() {
        super();
        // TODO Auto-generated constructor stub
    }

    private String callEndpoint(HttpServletRequest request, String plexURL)
            throws Exception {
        // make
        String queryString = request.getQueryString();
        if (queryString != null && queryString.length() > 0) {
            plexURL += "?" + queryString;
        }
        URL obj = new URL(plexURL);
        Cookie[] cookies = request.getCookies();

        StringBuffer allCookies = new StringBuffer();

        if (cookies != null) {
            for (int i = 0; i < cookies.length; i++) {
                // if( cookies[ i ].getName() == "SSO")
                {
                    allCookies.append(cookies[i].getName());
                    allCookies.append("=");
                    if ("SSO".equals(cookies[i].getName())) {
                        String ssostr = cookies[i].getValue();

                        allCookies.append(ssostr);
                    } else {
                        allCookies.append(cookies[i].getValue());
                    }

                    if (i < cookies.length)
                        allCookies.append(";");
                    // con.setRequestProperty("Cookie", cookies[ i
                    // ].getName()+"="+cookies[i].getValue());
                }
            }
        }

        System.out.println("All Cookies:" + allCookies.toString());
        HttpURLConnection con = (HttpURLConnection) obj.openConnection();
        con.setInstanceFollowRedirects(false);
        con.setRequestProperty("Accept-Charset", "ISO-8859-1");
        con.setRequestProperty("Cookie", allCookies.toString());

        con.setRequestMethod("GET");

        int responseCode = con.getResponseCode();

        System.out.println("\nSending Get request to URL:" + plexURL);
        System.out.println("Response code:" + responseCode);

        BufferedReader in = new BufferedReader(new InputStreamReader(
                con.getInputStream(), "ISO-8859-1")); // iso-8859-1

        int value;
        StringBuffer response = new StringBuffer();

        while ((value = in.read()) != -1) {
            char c = (char) value;
            response.append(c);
        }

        con.disconnect();

        return (response.toString());           

    }

    /**
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
        // ServletContext sc = getServletContext();
        StringBuilder URL = new StringBuilder("");
        String URI = request.getRequestURI();
        System.out.println("Full URL:" + URI);

            // Form the URL
            URL.append(proxy);
            URL.append(URI);

            String sspResponse = "";
            if (URI.endsWith("css")) {
                response.setContentType("text/css");
            } else {
                response.setContentType("text/html;charset=ISO-8859-1");
            }

            PrintWriter printWriter = response.getWriter();

            try {
                sspResponse = callEndPoint(request, URL.toString());
            } catch (Exception e) {
                System.out.println(e.getStackTrace());
                System.out.println("Some exception occured...");
            }

            printWriter.println(sspResponse);
    }

    /**
     * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void doPost(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

共 (0) 个答案