2011-02-07 4 views
0

먼저 포털 개발을 처음 사용하기 때문에 이전에 Websphere Portal에 대한 경험이 없습니다. 참고 : 무고한 사람을 보호하기 위해 URL이 변경되었습니다.Websphere Portal 7에서 교차 사이트 Ajax (JSON) 호출에 대한 프록시 구성

Websphere Portal 7에서 다른 서버로 Ajax 호출 (이 경우 POST)을 수행하려는 포틀릿이 있습니다. proxy-config를 만들고 ProxyServlet을 연결해야 Portal이 교차 사이트 아약스 호출을 허용한다는 것을 알았습니다. 그러나 프록시 서비스를 호출 할 때 403 Forbidden 메시지가 나타납니다.

다음
<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입니다 : 여기

내 프록시-config.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은 Firebug가 포틀릿이 타격하고 있음을 보여줍니다 (올바른 것 같습니다) : 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 변수를 .js 파일에 작성하는 것이 빠르고 간단합니다.JSP는 그래서 같은 포틀릿 컨텍스트 경로를 얻기 위해 내 아약스 호출 후

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

, 정말 같은 프록시에 내 전화로 상황에 맞는 URL을 앞에 추가 :

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

이제 난 SSL 인증서 문제를 해결하기 위해 노력하고 있지만 지금은 프록시를 통과하고 있습니다.

관련 문제