使用ApacheKNOxGateway定制的基于spring的RESTAPI

eqoofvh9  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(365)

我正在尝试做一个poc,其中我需要通过apacheknox保护我的集群,而我自己开发的restapi将位于knox后面。用户身份验证应该如何与knox ranger一起工作,我将如何保护我的数据访问?

rqdpfwrv

rqdpfwrv1#

这是我的2 xml文件,如果我有任何错误或需要做什么,请查看**rewrite.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>
hjzp0vay

hjzp0vay2#

您需要为apacheknox的自定义restapi提供服务定义。这将使诺克斯能够:
识别传入到基于spring的服务的api请求的url,并能够将请求路由到它
知道如何重写响应中的特定内容(如URL或其他敏感内容),以便在适当时通过网关将客户端重定向回。
请参见:http://knox.apache.org/books/knox-0-7-0/dev-guide.html#service+《开发人员指南》中的definition+文件介绍了如何提供服务定义。
一旦服务定义就位,您只需要添加 <service> 元素来指示实际的基于spring的服务运行的位置。可能是这样的:

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

《开发人员指南》的同一部分也对此进行了描述。对于拓扑中服务声明的其他示例,《用户指南》也会有所帮助。
您可以查看这些示例,并将它们与这些现有服务的服务定义文件进行比较,以查看服务角色如何Map。这将帮助您为自己的服务做同样的事情。
有关身份验证的详细信息,请参阅http://knox.apache.org/books/knox-0-7-0/user-guide.html#authentication 有关设置基于ldap的身份验证的说明,请参阅《用户指南》。您可能还对其他身份验证和联合身份验证提供程序实现感兴趣。你也可以在用户指南中找到它们。
也可以随意使用apacheknox的开发人员或用户电子邮件列表。

irtuqstp

irtuqstp3#

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

<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=""> 在rewrite.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>

现在来看rewrite.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>

相关问题