使用Spring Data运行Mongo JS函数时出错。

时间:2018-08-02 09:49:13

标签: spring mongodb spring-data mongojs

在尝试执行Js函数时,Spring数据和mongodb遇到问题。

问题是我收到此错误:

  

命令失败,并显示错误13:“在XXXXX上未授权执行命令{eval:“ test(Document {{test = test}})”}}'...。完整响应为{“ ok”: 0.0,“ errmsg”:“未经授权。    执行命令{eval:\“ test(Document {{test = test}})\”}“,” code“:13};嵌套的异常是com.mongodb.MongoCommandException:    命令失败,错误13:“未授权.....执行命令

起初我以为这只是帐户权限的问题,但是我确实尝试使用相同的帐户直接从mongodb客户端(在我的情况下为Robo 3T)和使用相同的用户帐户来创建和执行js函数。可以毫无问题地创建和运行JS函数。

我正在使用以下Spring版本:

<spring.version>5.0.8.RELEASE</spring.version>
<spring-data.version>2.0.9.RELEASE</spring-data.version>

在Tomcat 8和Java 8上运行

以下依赖项:

<dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-jpa</artifactId>
      <version>${spring-data.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-mongodb</artifactId>
      <version>${spring-data.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-web</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-taglibs</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.security</groupId>
      <artifactId>spring-security-config</artifactId>
      <version>${spring.security.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

通过以下配置在Spring上下文中创建到Mongo的连接:

    <mongo:mongo-client id="mongoClient" host="${mongosHost}" port="${mongosPort}" credentials="${mongosCredentials}" />
    <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
      <constructor-arg ref="mongoClient"/>
      <constructor-arg name="databaseName" value="${mongoSchemaDB}"/>
    </bean>

我正在使用Java中的这段代码来执行JS:

    ScriptOperations scriptOps = mongoTemplate.scriptOps();
    ExecutableMongoScript script = new ExecutableMongoScript(scriptJS);
    NamedMongoScript name = new NamedMongoScript(functionName, script);
    scriptOps.register(name);
    scriptOps.call(name.getName(),request);

我确实尝试过运行它,而无需向:p注册

   scriptOps.execute(script, request)

,并出现相同的授权错误。

'register'方法可以正常工作,我可以使用相同的帐户从Robo 3T客户端运行js函数(由Java代码注册)。 但是我无法从Java代码运行它。

我不确定是否是某种驱动程序问题,或者我是如何建立与Mongo的连接,而该连接阻止了同一用户执行我可以从Robo 3T执行的相同操作。

任何人都知道可能是什么问题?

0 个答案:

没有答案