Oracle ORDS на Tomcat 8 скрывает имя схемы в URL

Я не хочу, чтобы пользователи могли видеть контекст или имя схемы в URL ORDS.

Как и в документации Oracle, мой URL выглядит примерно так:

https://server:port/ords/workspace/hr/employees/7369

обратите внимание на название схемы, HR присутствует. Моя цель - скрыть ORDS, рабочее пространство и HR. Так что мой URL должен быть:

https://server:port/redirect_name/employees/7369

То, что я не хочу, это перенаправление HTTP 301, которое обновляет панель браузера.

Вещи пытались

1) UrlRewriteFilter в ROOT, но с type="redirect" он только перенаправляет и пропускает контекст. Без type="redirect" выдает "Запрашиваемый ресурс недоступен." из Tomcat, так что, видимо, даже не добраться до ОРДС.

2) перенаправление JSP

<% response.sendRedirect("/some/where"); %>

который успешно перенаправлен, но утечка контекста.

3) Tomcat "переписать Valve" снова тот же результат успешного перенаправления 301 типа.

Не пробовал

1) Front Tomcat с экземпляром Apache httpd.

1 ответ

Ответ относится только к ORDS 3.0.9. README описывает:

  • BUG: 25072243 - Исправлена ​​регрессия, предотвращающая сопоставление URL-адресов схем с поддержкой ORDS, если пул шлюза PL/SQL не существует

без которого я не верю, что это будет работать (не проверено). Обратите внимание, что при обновлении с ORDS 3.0.6 или более ранней версии произошли изменения в схеме БД, и вам необходимо выполнить обновление.

Это не полный ответ, но самый близкий мне удалось получить. Сначала переименуйте файл ords.war в нужное имя redirect_name.war. Это автоматически создаст новый каталог конфигурации для соединения с базой данных, но еще не будет настроен. Варианты: либо установить redirect_name.war, используя:

java -jar redirect_name.war install simple

или путем ручного редактирования файлов конфигурации, чтобы они соответствовали уже имеющимся настройкам ORDS. Есть два способа найти каталог конфигурации

java -jar redirect_name.war configdir

даст вам каталог конфигурации или вы можете проверить его в:

.\webapps\redirect_name\WEB-INF\web.xml

с именем параметра в предположении, что Tomcat настроен на распаковку WAR-файлов, в противном случае посмотрите сам архив сжатых WAR-файлов.

На данный момент URL изменился с этого:

https://server:port/ords/workspace/hr/employees/7369

к этому:

https://server:port/redirect_name/workspace/hr/employees/7369

Следующим шагом является настройка URL-адреса карты, который можно выполнить с помощью:

java -jar redirect_name.war mapurl --type base-path --workspace-id hr / apex

или вручную создав файл url-mapping.xml в найденном выше. Если вы вручную создадите файл, он должен выглядеть так:

<?xml version="1.0" encoding="UTF-8"?>
<pool-config xmlns="http://xmlns.oracle.com/apex/pool-config">
   <pool name="apex" base-path="/" workspace-id="hr" updated="2017-01-01T01:01:01.012Z"/>
</pool-config>

Имя пула "apex" - это имя установленной базы данных по умолчанию. Вы можете проверить, какие имена баз данных были установлены в ORDS, проверив подкаталог /conf/, где при установке по умолчанию вы найдете файл с именем apex_pu.xml, описывающий соединение с базой данных. Если вы хотите подключиться к другой базе данных (подробнее здесь), это можно сделать с помощью:

java -jar redirect_name.war setup --database ords_db_name

который проведет вас через серию подсказок для ввода имени службы или SID. Обратите внимание, что вы должны выбрать 1, когда будет предложено здесь:

Enter 1 if you want to verify/install Oracle REST Data Services schema or 2 to skip this step [1]

или соединение с базой данных не будет создано. Чтобы проверить успешность, проверьте местоположение / conf и найдите ords_db_name_pu.xml. Обратите внимание, что ords_db_name - это просто псевдоним имени подключения к базе данных, используемый ORDS, он не должен быть фактическим SID или именем службы.

Эти шаги приведут URL вниз от промежуточного шага:

https://server:port/redirect_name/workspace/hr/employees/7369

к этому:

https://server:port/redirect_name/workspace/employees/7369

Параметр url-mapping.xml/mapurl с / убрал необходимость в любом имени. Поочередно эту команду можно было бы использовать:

java -jar redirect_name.war mapurl --type base-path --workspace-id hr /something_here apex

получая этот URL:

https://server:port/redirect_name/workspace/something_here/employees/7369

Не испытано

Переименование ords.war в ROOT.war теоретически устраняет необходимость в указателе "redirect_name" в URL, но я не был готов иметь ORDS в расположении ROOT.

Другие вопросы по тегам