2017-04-11 88 views
1

是否有可能在BaseX中创建一个公共REST API,以便客户端根本不需要验证?BaseX:没有验证的公共REST API

此公共API应该是只读的。我已经完成的工作是创建一个名为HTTPGuest的用户,该用户可以读取某些数据库。

然后我试了basexhttp -UHTTPGuest。但API仍然希望通过基本认证获得凭证。

+1

如果使用BaseX 8.6及更高版本,它实际上应该就像你一样,足以在命令行上指定用户。 –

+1

是的,在答案发布之后,我意识到自己。在我的情况下,问题实际上是另一个:当我从不是'basexhttp'的父目录的工作目录执行'basexhttp'时,API请求基本认证。我现在有一个包装脚本,它基本上只是'cd /.../basex/bin; 。/ basexhttp'。但是Jens Erat的答案对我来说仍然很有用,因为现在我不必一直使用'-U'选项。 – Seb3736

回答

2

您可以通过修改web.xml文件,它通常位于~/BaseXWeb/WEB-INF/web.xml提供默认凭据。该文件包含以下块>

<!-- REST Service (can be deactivated by removing this entry) --> 
    <servlet> 
    <servlet-name>REST</servlet-name> 
    <servlet-class>org.basex.http.rest.RESTServlet</servlet-class> 
    <!-- service-specific credentials 
    <init-param> 
     <param-name>org.basex.user</param-name> 
     <param-value/> 
    </init-param> 
    <init-param> 
     <param-name>org.basex.password</param-name> 
     <param-value/> 
    </init-param> 
    --> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>REST</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 

这里,取消对<init-param/>子树和用户/密码组合添加到<param-value/>元素,例如

<!-- REST Service (can be deactivated by removing this entry) --> 
    <servlet> 
    <servlet-name>REST</servlet-name> 
    <servlet-class>org.basex.http.rest.RESTServlet</servlet-class> 
    <init-param> 
     <param-name>org.basex.user</param-name> 
     <param-value>HTTPGuest</param-value> 
    </init-param> 
    <init-param> 
     <param-name>org.basex.password</param-name> 
     <param-value>super-secret-passphrase</param-value> 
    </init-param> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>REST</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
    </servlet-mapping> 
+1

一个小的增加:使用BaseX 8.6,不需要再指定密码(因为无论如何它都是服务器实例已知的)。 –

+0

即使没有设置'org.basex.password',也可以很好地工作。谢谢你们俩! – Seb3736