让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 次评分)
评论: 38 | 查看次数: 4610
发表评论
订阅
上一篇
|

文章来自:
标签: 





干洗连锁
干洗设备
干洗
美国ucc国际洗衣连锁
美国ucc干洗
干洗店
干洗机
水洗设备
洗鞋设备
洗涤价格
干洗机价格
Fake Watch
Replica Bags
Replica Watches
Wholesale Replica Watches
Rolex Replica Watches
Replica Thomas Wylde
Replica Breguet
Montblanc Replica
Replica Maurice Lacroix
Replica Gucci Watch
Replica Hermes
Chanel Replica Watches
Mont Blanc Handbags
Jacques Lemans Replica Watches
Replica Bedat & Co Watches
Concord Replica
Fake Tissot
Fake Casio Watches
Louis Vuitton Replica Bags
Fake Tudor
Richard Mille Watch
Fake Citizen Watch
Chronoswiss Watches
Fake U-Boat Watch
Fake Swiss Army Watches
power leveling sont Voile!
wow lvl 70 sont bon marché et vite!
北京离婚律师 北京婚姻律师
格式二:
北京离婚律师 北京婚姻律师
新闻
搞笑
星座
测试
游戏
诱惑
财经
美图
新闻
搞笑
星座
测试
游戏
诱惑
财经
新闻
搞笑
星座
测试
游戏
诱惑
财经
jianyang
TCM
Diabeat
jimpness beauty
furunbao
星座
jianyang
TCM
Diabeat
jimpness beauty
furunbao
星座
jianyang
TCM
Diabeat
变易
TCM
Diabeat