首先,我通常是门户网站开发的新手,因此以前没有使用 Websphere Portal 的经验。注意:网址已更改以保护无辜者。
我在 Websphere Portal 7 上有一个 portlet,我试图在其中对另一台服务器进行 Ajax 调用(在本例中为 POST)。我知道我必须创建代理配置并连接 ProxyServlet,以便 Portal 允许跨站点 ajax 调用,我已经做到了。但是,在调用代理服务时,我收到了 403 Forbidden 消息。
这是我的代理配置.xml:
<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>
这是 web.xml 中的 ProxyServlet:
<servlet>
<servlet-name>ProxyServlet</servlet-name>
<servlet-class>com.ibm.wps.proxy.servlet.ProxyServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>/ss/services/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>ProxyServlet</servlet-name>
<url-pattern>/proxy/*</url-pattern>
</servlet-mapping>
这是我试图从 javascript(通过 jQuery)调用的 URL:
"wps/proxy/https/subdomain.domain.org/ss/services/service1"
我目前收到 403 Forbidden “不允许您尝试通过代理访问的 URL”错误消息。这是 Firebug 显示 portlet 正在命中的 URL(似乎是正确的): http://portalsubdomain.domain.org:77777/wps/proxy/https/subdomain.domain.org/ss/services/service1。
根据 wp7 的代理文档,我知道 403 意味着以下之一:
- 该请求未被代理接受,即代理未找到授予目标服务器访问权限的匹配访问策略。
- 基本身份验证失败。
它应该找到代理策略,因为我已经为所有 URL 定义了它,所以我错过了什么?我想我要么没有正确配置代理策略(身份验证?),要么我没有正确构建 JSON 调用中的 URL。我查看了“规则”格式,但未能提出可行的解决方案。
有几点需要注意:
- 这个 portlet 在另一个页面的子页面上,dojo 是我们创建的自定义主题的一部分
- 我们正在使用 LDAP 登录门户,所以不确定这是否也有什么不同。运行此程序时,我正在使用门户管理员权限登录。
- 正在加载 portlet 的页面(以及页面/空间结构)的 URL 是http://portalsubdomain.domain.org:77777/wps/demoportal/home/demo/ajaxTest。不确定代理在寻找什么,但 proxy-config.xml 位于我的 portlet 的 WEB-INF 文件夹中。
- 如果我将 JSON 调用中的 URL 更改为 wps/demoportal/home/demo/ajaxTest/proxy/https/subdomain.domain.org/ss/services/service1,我将获得 ajaxTest 页面的 HTML 作为回报。