WebSpherePortal7中跨站点Ajax(JSON)调用的代理配置
首先,我一般不熟悉门户开发,因此以前没有使用WebSpherePortal的经验。注意:URL已被更改以保护无辜者 我在WebSpherePortal7上有一个portlet,我试图在其中对另一台服务器进行Ajax调用(在本例中是POST)。我知道我必须创建代理配置并连接ProxyServlet,以便门户允许跨站点ajax调用,我已经做到了。然而,我在调用代理服务时收到一条403禁止消息 下面是我的proxy-config.xml:WebSpherePortal7中跨站点Ajax(JSON)调用的代理配置,ajax,json,websphere-portal,Ajax,Json,Websphere Portal,首先,我一般不熟悉门户开发,因此以前没有使用WebSpherePortal的经验。注意:URL已被更改以保护无辜者 我在WebSpherePortal7上有一个portlet,我试图在其中对另一台服务器进行Ajax调用(在本例中是POST)。我知道我必须创建代理配置并连接ProxyServlet,以便门户允许跨站点ajax调用,我已经做到了。然而,我在调用代理服务时收到一条403禁止消息 下面是我的proxy-config.xml: <proxy:proxy-rules xm
<proxy:proxy-rules
xmlns:proxy="http://www.ibm.com/xmlns/prod/sw/ajax/proxy-config/1.1"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<proxy:mapping contextpath="/proxy" url="*"/>
<proxy:policy acf="none" url="*">
<proxy:actions>
<proxy:method>GET</proxy:method>
<proxy:method>POST</proxy:method>
</proxy:actions>
</proxy:policy>
<proxy:policy acf="none" url="https://subdomain.domain.org/ss/services/*">
<proxy:actions>
<proxy:method>GET</proxy:method>
<proxy:method>POST</proxy:method>
</proxy:actions>
</proxy:policy>
<proxy:meta-data>
<proxy:name>max-connections-per-host</proxy:name>
<proxy:value>5</proxy:value>
</proxy:meta-data>
<proxy:meta-data>
<proxy:name>max-total-connections</proxy:name>
<proxy:value>100</proxy:value>
</proxy:meta-data>
</proxy:proxy-rules>
我目前收到403禁止“您试图通过代理访问的URL不允许”错误消息。这是Firebug显示portlet正在命中的URL(似乎是正确的):
根据wp7的代理文档,我知道403表示以下内容之一:
- 代理未接受该请求,即代理未找到授予对目标服务器访问权限的匹配访问策略
- 基本身份验证失败李>
- 这个portlet位于另一个页面的子页面上,dojo是我们创建的自定义主题的一部分
- 我们正在使用LDAP登录门户,因此不确定这是否也有什么不同。运行此程序时,我使用门户管理员权限登录
- 加载portlet的页面的URL(因此页面/空间结构)为。不确定代理正在查找什么,但proxy-config.xml位于我的portlet的WEB-INF文件夹中
- 如果我将JSON调用中的URL更改为wps/demoportal/home/demo/ajaxTest/proxy/https/subdomain.domain.org/ss/services/service1,我将得到ajaxTest页面的HTML作为回报
- 找到了解决方案!我需要获取portlet的上下文路径,并将其前置到服务URL
由于我的服务调用位于一个单独的.js文件中(通过JavascriptMVC和jQuery),因此我的快速修复方法是在.jsp上创建一个JavaScript变量,以获得如下portlet上下文路径:
var globalRequestContextUrl = "<%= renderResponse.encodeURL(renderRequest.getContextPath()) %>";
现在我正在与SSL证书问题作斗争,但我现在肯定要通过代理
"wps/proxy/https/subdomain.domain.org/ss/services/service1"
var globalRequestContextUrl = "<%= renderResponse.encodeURL(renderRequest.getContextPath()) %>";
globalRequestContextUrl + "https/subdomain.domain.org/ss/services/service1"