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.