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) 个答案