まず、私はポータル開発全般に不慣れで、Websphere Portal の経験はありません。注: 無実の人を保護するために、URL は変更されています。
別のサーバーに対して Ajax 呼び出し (この場合は POST) を実行しようとしている Websphere Portal 7 にポートレットがあります。ポータルがサイト間の ajax 呼び出しを許可するように、proxy-config を作成して ProxyServlet を接続する必要があることはわかっています。ただし、プロキシ サービスを呼び出すと、403 Forbidden メッセージが表示されます。
これが私のproxy-config.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 がポートレットがヒットしていることを示す URL です (正しいようです): http://portalsubdomain.domain.org:77777/wps/proxy/https/subdomain.domain.org/ss/services/service1。
wp7 のプロキシ ドキュメントに基づいて、403 は次のいずれかを意味することがわかっています。
- 要求はプロキシによって受け入れられませんでした。つまり、ターゲット サーバーへのアクセスを許可する一致するアクセス ポリシーがプロキシで見つかりませんでした。
- 基本認証に失敗しました。
すべての URL に対してプロキシ ポリシーが定義されているため、プロキシ ポリシーが見つかるはずですが、何が欠けているのでしょうか? プロキシ ポリシーを正しく構成していない (認証?) か、JSON 呼び出しで URL を正しく構成していないと考えています。「ルール」の形式を見直しましたが、機能する解決策を思いつくことができませんでした。
注意すべき点がいくつかあります。
- このポートレットは別のページの子ページにあり、Dojo は作成したカスタム テーマの一部です
- LDAP を使用してポータルにログインしているため、それによっても違いが生じるかどうかはわかりません。これを実行するとき、ポータル管理者権限でログインしています。
- ポートレットがロードされるページ (およびページ/スペース構造) の URL はhttp://portalsubdomain.domain.org:77777/wps/demoportal/home/demo/ajaxTestです。プロキシが何を探しているかはわかりませんが、proxy-config.xml はポートレットの WEB-INF フォルダー内にあります。
- JSON 呼び出しの URL を wps/demoportal/home/demo/ajaxTest/proxy/https/subdomain.domain.org/ss/services/service1 に変更すると、ajaxTest ページの HTML が返されます。