0

まず、私はポータル開発全般に不慣れで、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 が返されます。
4

1 に答える 1

0

解決策を見つけました!ポートレットのコンテキスト パスを取得し、それをサービス URL の先頭に追加する必要がありました。

私のサービス呼び出しは (JavascriptMVC と jQuery を介して) 別の .js ファイルにあるため、次のようにポートレット コンテキスト パスを取得するために、.jsp に JavaScript 変数を作成するという簡単な修正を行います。

var globalRequestContextUrl = "<%= renderResponse.encodeURL(renderRequest.getContextPath()) %>";

次に、ajax 呼び出しで、次のようにプロキシへの呼び出しにコンテキスト URL を追加します。

globalRequestContextUrl + "https/subdomain.domain.org/ss/services/service1"

現在、SSL 証明書の問題と戦っていますが、プロキシを確実に通過しています。

于 2011-02-08T23:01:56.503 に答える