2011-02-07 10 views
0

まず、私は一般的なポータル開発を初めて行ったため、以前はWebsphere Portalの経験はありませんでした。注:無実を保護するためにURLが変更されています。Websphere Portal 7でのクロスサイトAjax(JSON)コールのプロキシ設定

Websphere Portal 7に、私がAjaxコール(この場合はPOST)を別のサーバーに作成しようとしているポートレットがあります。私は、ProxyServletを作成してProxyServletを配線して、Portalがクロスサイトのajax呼び出しを許可するようにしなければならないことを知っています。しかし、プロキシされたサービスを呼び出すときに403 Forbiddenメッセージが表示されます。

ここに私のプロキシ-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> 

はProxyServletはweb.xmlにある:

<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> 

そして、ここでは、私は(ジャバスクリプトから呼び出そうとしてるURLですjQueryの経由):

"wps/proxy/https/subdomain.domain.org/ss/services/service1" 

私は現在、403を使用して、プロキシ経由でアクセスしようとしたURLがノーである」禁断取得していますt allowed "というエラーメッセージが表示されます。これはURLであり、ポートレットがヒットしていることを示しています(正しいと思われる): http://portalsubdomain.domain.org:77777/wps/proxy/https/subdomain.domain.org/ss/services/service1

WP7のプロキシのドキュメントに基づいて、私は403には、次のいずれかを意味知っている:要求はプロキシによって受け入れられなかった

  • 、それはプロキシでは、へのアクセスを許可する一致するアクセスポリシーを発見しましたターゲットサーバー。
  • 基本認証に失敗しました。

私はそれがすべてのURLに対して定義されているので、プロキシポリシーが見つかっているはずです。何が欠けていますか?私は、プロキシポリシーを正しく設定していないか(認証?)、JSON呼び出しでURLを正しく構築していないと考えています。私はフォーマットのルールを見直しましたが、うまくいくソリューションを考え出すことができませんでした。

注意すべき物事のカップル:

  • このポートレットは、別のページの子ページ上にあり、道場は、カスタムテーマの一部であり、我々は我々がポータルにログインするために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が返されます。

答えて

0

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

私のサービスコールは(JavascriptMVC & jQuery経由で)別の.jsファイルに入っているので、私の迅速かつ厄介な問題は、JavaScript変数を作成することです。そのようなポートレットのコンテキストパスを取得するために、JSP:

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

はその後、私のAJAX呼び出しでは、私はそうのようなプロキシへの私の呼び出しにコンテキストURLを付加:

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

私はSSL証明書の問題と戦っていますが、私は間違いなく今すぐプロキシを通過しています。