在尝试执行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执行的相同操作。
任何人都知道可能是什么问题?