1

我不希望用户能够在 ORDS URL 中看到上下文或模式名称。

在 Oracle 文档中,我的 URL 是这样的:

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

注意架构名称,HR 存在。我的目标是隐藏 ORDS、工作区和 hr。所以我的网址应该是:

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

我不想要的是更新浏览器栏的 HTTP 301 重定向。

尝试过的事情

1)UrlRewriteFilter 在 ROOT 但 type="redirect" 它只重定向和泄漏上下文。没有 type="redirect" 会产生“请求的资源不可用。” 来自Tomcat,所以显然甚至没有到达ORDS。

2)JSP重定向

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

成功重定向,但泄漏上下文。

3)Tomcat“rewrite Valve”再次同样的结果成功的301类型重定向。

没试过

1) 前端 Tomcat 与 Apache httpd 实例。

4

1 回答 1

3

答案仅适用于 ORDS 3.0.9。自述文件描述:

  • BUG:25072243 - 如果 PL/SQL 网关池不存在,则修复回归防止启用 ORDS 的架构的 url 映射

没有它,我不相信这会起作用(未经测试)。请注意,如果从 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

下一步是设置一个 map-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”是默认安装的数据库名称。您可以通过检查 /conf/ 子目录来检查 ORDS 中设置了哪些数据库名称,在默认安装中,您将找到一个名为 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

产生这个网址:

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

未测试

将 ords.war 重命名为 ROOT.war 理论上消除了 URL 中需要“redirect_name”,但我不准备在 ROOT 位置使用 ORDS。

于 2017-06-09T04:09:29.687 回答