带有 Apache Knox 网关的自定义基于 Spring 的 rest API



我正在尝试做一个POC,我需要通过Apache Knox保护我的集群,而我自己开发的rest API将位于Knox后面。用户身份验证应如何与 Knox Ranger 配合使用,我将如何保护我的数据访问?

让我们从服务.xml文件开始。它可能看起来像下面更简单的版本。仅当您需要将特定规则应用于请求或响应的特定部分时,才需要更复杂的表单。请注意,理想情况下只需要一条路由,但 Knox 中的**表示一个或多个路径级别(不是零或多个)。因此,如果没有第一条路由,Knox 不会将请求发送到服务的根/Test_Web_App 路径。

<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
    <routes>
        <route path="/Test_Web_App/?**">
        <route path="/Test_Web_App/**?**">
    </routes>
</service>

如果你想非常具体地说明它,这将是等效的。在这里,<rewrite apply="">标识重写中的特定命名规则.xml <rewrite to="">标识规则应应用于请求和/或响应的哪个部分。

<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
    <routes>
        <route path="/Test_Web_App/?**">
          <rewrite apply="TEST_WEB_APP/Test_Web_App" to="request.url"/>
        </route>
        <route path="/Test_Web_App/**?**">
          <rewrite apply="TEST_WEB_APP/Test_Web_App/query" to="request.url"/>
        </route>
    </routes>
</service>

现在进行重写.xml。你的非常接近。我添加的只是一个名称(即路径),导致对第二条规则的模式和模板{path=**}。在<rule pattern="">中,这用于为从匹配模式中提取的值命名。在<rewrite template="">中,名称用于使用从匹配模式中提取的命名值填充正在创建的 URL 的一部分。

<rules>
    <rule dir="IN" name="TEST_WEB_APP/Test_Web_App" pattern="*://*:*/**/Test_Web_App/?{**}">
        <rewrite template="{$serviceUrl[TEST_WEB_APP]}/?{**}"/>
    </rule>
    <rule dir="IN" name="TEST_WEB_APP/Test_Web_App/query" pattern="*://*:*/**/Test_Web_App/{path=**}?{**}">
        <rewrite template="{$serviceUrl[TEST_WEB_APP]/{path=**}?{**}"/>
    </rule>
</rules>
您需要

为 Apache Knox 提供自定义 REST API 的服务定义。这将允许诺克斯:

  1. 识别 API 的 URL 传入到基于 Spring 的服务的请求,并能够将请求路由到它
  2. 了解如何从响应中重写特定内容(如 URL 或其他敏感内容),以便在适当时将客户端重定向回网关。

请参阅:开发人员指南中的 http://knox.apache.org/books/knox-0-7-0/dev-guide.html#Service+Definition+Files,了解如何提供服务定义。

服务定义到位后,您只需在 Knox 拓扑中添加一个 <service> 元素,以指示实际基于 Spring 的服务运行的位置。它会是这样的:

<service>
    <role>SERVICE</role>
    <url>http://url.to.your.service/v1/...</url>
</service>

开发人员指南的同一部分中也对此进行了描述。您可能还会发现用户指南有助于拓扑中服务声明的其他示例。

您可以查看这些示例,并将其与这些现有服务的服务定义文件进行比较,以了解服务角色的映射方式。这将帮助您对自己的服务执行相同的操作。

有关身份验证详细信息,请参阅用户指南中的 http://knox.apache.org/books/knox-0-7-0/user-guide.html#Authentication,以获取有关设置基于 LDAP 的身份验证的说明。您可能还对其他身份验证和联合身份验证提供程序实现感兴趣。您也可以在用户指南中找到它们。

您也可以随意参与Apache Knox的开发或用户电子邮件列表。

这些是我的 2 个 xml 文件,如果我有任何错误或我需要做什么,请查看它 **重写.xml

        <rule dir="IN" name="TEST_WEB_APP/Test_Web_App" pattern="*://*:*/**/Test_Web_App/?{**}">
            <rewrite template="{$serviceUrl[TEST_WEB_APP]}/?{**}"/>
        </rule>
        <rule dir="IN" name="TEST_WEB_APP/Test_Web_App/query" pattern="*://*:*/**/Test_Web_App/{**}?{**}">
            <rewrite template="{$serviceUrl[TEST_WEB_APP]/{**}?{**}"/>
        </rule>
         </rules>
**service.xml
<service role="TEST_WEB_APP" name="Test_Web_App" version="0.0.1">
    <routes>
        <route path="/Test_Web_App/**">
            <rewrite apply="TEST_WEB_APP/Test_Web_App/**" to="response.body" />
        </route>
        <route path="/Test_Web_App/**?**">
           <rewrite apply="TEST_WEB_APP/Test_Web_App/**?**" to="response.body"/>
    </routes>
</service>

相关内容

  • 没有找到相关文章

最新更新