让Resin HttpProxyServlet支持多域名
作者:anotherbug 日期:2008-06-09 00:39:38
一般应用中有ajax进行跨子域代理调用时,通常需要设置HTTP代理,解决域的权限问题。
举例,blog.chinajavaworld.com中用ajax调search子系统的服务,Resin的HttpProxyServlet设置如下:
在search.chinajavaworld.com/ajax/search/test.jsp中
现在访问:
http://blog.chinajavaworld.com/ajax/search/test.jsp,输出:
当应用要支持多域名访问时,问题来了:
如用 http://blog.chinajavaworld-bbb.com/ajax/search/test.jsp 进行访问,输出也是:
如果设置两个host
则用两个域名访问的话,都将输出:
现在的需求是,用哪个主域名访问的,就必须返回与该主域名一致的子域
解决方法:修改 HttpProxyServlet 源码:
TcpPool.java加入以下方法:
HttpProxyServlet中加入:
String host = req.getHeader("Host");
String mainHost = TcpPool.getMainDomain(host);
然后将
TcpPool.Server server = _tcpPool.nextServer();
替换为
TcpPool.Server server = _tcpPool.nextServer(mainHost);
举例,blog.chinajavaworld.com中用ajax调search子系统的服务,Resin的HttpProxyServlet设置如下:
1 | <servlet> <servlet-name>http-proxy</servlet-name> <servlet-class>com.caucho.servlets.HttpProxyServlet</servlet-class> <init host='search.chinajavaworld.com:80' /> </servlet> <servlet-mapping url-pattern="/ajax/search/*" servlet-name="http-proxy" /> |
在search.chinajavaworld.com/ajax/search/test.jsp中
1 | <%out.print(request.getHeader("Host"));%>
|
现在访问:
http://blog.chinajavaworld.com/ajax/search/test.jsp,输出:
1 | search.chinajavaworld.com |
当应用要支持多域名访问时,问题来了:
如用 http://blog.chinajavaworld-bbb.com/ajax/search/test.jsp 进行访问,输出也是:
1 | search.chinajavaworld.com |
如果设置两个host
1 | <servlet> <servlet-name>http-proxy</servlet-name> <servlet-class>com.caucho.servlets.HttpProxyServlet</servlet-class> <init host='search.chinajavaworld.com:80' /> <init host='search.chinajavaworld-bbb.com:80' /> </servlet> |
则用两个域名访问的话,都将输出:
1 | search.chinajavaworld-bbb.com |
现在的需求是,用哪个主域名访问的,就必须返回与该主域名一致的子域
解决方法:修改 HttpProxyServlet 源码:
TcpPool.java加入以下方法:
1 | public Server nextServer(String mainHost) {
Server bestServer = null;
synchronized (this) {
String _URL = null;
for (int i = 0; i < _servers.length; i++) {
Server server = _servers[i];
if (server.getURL().indexOf(mainHost) != -1) {
//System.out.println("ok,found host.return server.");
bestServer = server;
break;
}
if (i == _servers.length - 1)
_URL = server.getURL();
}
if (bestServer == null) {
//System.out.println(mainHost+" is not in server list. add now.");
String oldMainHost = getMainDomain(_URL);
_URL = _URL.replace(oldMainHost, mainHost);
String _host = getDomain(_URL);
bestServer = new Server(_host);
_hosts.add(_host);
Server[] servers = new Server[_servers.length + 1];
System.arraycopy(_servers, 0, servers, 0, _servers.length);
servers[_servers.length] = bestServer;
_servers = servers;
}
return bestServer;
}
}
|
HttpProxyServlet中加入:
String host = req.getHeader("Host");
String mainHost = TcpPool.getMainDomain(host);
然后将
TcpPool.Server server = _tcpPool.nextServer();
替换为
TcpPool.Server server = _tcpPool.nextServer(mainHost);
平均得分
(0 次评分)
评论: 31 | 查看次数: 3863
发表评论
订阅
上一篇
|

文章来自:
标签: 





新闻
搞笑
星座
测试
游戏
诱惑
财经
美图
新闻
搞笑
星座
测试
游戏
诱惑
财经
新闻
搞笑
星座
测试
游戏
诱惑
财经
jianyang
TCM
Diabeat
jimpness beauty
furunbao
星座
jianyang
TCM
Diabeat
jimpness beauty
furunbao
星座
jianyang
TCM
Diabeat
变易
TCM
Diabeat
网站优化
google优化
品牌搜索网
生物灭螂 网站建设
google优化
防水卷材
北京google优化
上海google优化
上海装饰建材网
网站优化
google优化
品牌搜索网
生物灭螂
网站建设
google优化
防水卷材
防水卷材
防水卷材
防水卷材
防水卷材
防水卷材
防水卷材
防水卷材
防水卷材
防水卷材
上海装饰建材网
网站优化
google优化
品牌搜索网
生物灭螂
网站建设
google优化
鸿阳装潢
上海装饰
东方股票网
东方股票网东方股票网东方股票网东方股票网财经财经股票入门股票入门
beijing massage
beijing massage
beijing massage