Во-первых, я новичок в разработке порталов в целом и, таким образом, ранее не имел опыта работы с Websphere Portal. Примечание. URL-адреса были изменены, чтобы защитить невинных.
У меня есть портлет на Websphere Portal 7, где я пытаюсь сделать Ajax-вызов (в данном случае POST) на другой сервер. Я знаю, что мне нужно создать прокси-конфиг и подключить ProxyServlet, чтобы Portal разрешал межсайтовый вызов ajax, и я это сделал. Однако при вызове прокси-службы я получаю сообщение 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>
Вот 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, который я пытаюсь вызвать из javascript (через jQuery):
"wps/proxy/https/subdomain.domain.org/ss/services/service1"
В настоящее время я получаю сообщение об ошибке 403 Forbidden "URL, к которому вы пытались получить доступ через прокси-сервер, запрещен". И вот URL-адрес Firebug показывает, что портлет работает (кажется правильным):
http://portalsubdomain.domain.org:77777/wps/proxy/https/subdomain.domain.org/ss/services/service1.
Исходя из прокси-документов для wp7, я знаю, что 403 означает одно из следующего:
- Запрос не был принят прокси-сервером, то есть прокси-сервер не нашел подходящую политику доступа, которая предоставляет доступ к целевому серверу.
- Базовая аутентификация не удалась.
Он должен был найти политику прокси, так как я определил ее для всех URL, так что мне не хватает? Я полагаю, что либо неправильно настроил политику прокси (аутентификация?), Либо неправильно сконструировал URL в вызове JSON. Я просмотрел формат «правила», но не смог найти решение, которое работает.
Обратите внимание на пару вещей:
- Этот портлет находится на дочерней странице другой страницы, а dojo является частью пользовательской темы, которую мы создали
- Мы используем LDAP для входа на портал, поэтому не уверены, что это также имеет значение. Я выполняю вход с правами администратора портала при запуске этого.
- URL-адрес страницы, на которую загружается портлет (и, следовательно, структура страницы / пространства), http://portalsubdomain.domain.org:77777/wps/demoportal/home/demo/ajaxTest. Не уверен, что ищет прокси, но proxy-config.xml находится внутри моего папка WEB-INF портлета.
- Если я изменю URL в своем вызове JSON на wps / demoportal / home / demo / ajaxTest / proxy / https / subdomain.domain.org / ss / services / service1, я получу HTML-код для страницы ajaxTest в ответ.