Java 在组织中创建jasper用户

Java 在组织中创建jasper用户,java,amqp,jasperserver,Java,Amqp,Jasperserver,我正在努力实现一个目标,我的web应用程序和jasper像微服务一样工作。我使用rabbitmq将用户详细信息从我的web应用程序传递给jasper。我已经成功地为jasper开发了一个消费者,现在我在组织中创建用户时遇到了麻烦。我遵循jasper的API编写代码。() 我得到了这个错误 java.lang.IllegalArgumentException: This implementation does not support tenants at com.jaspersoft.ja

我正在努力实现一个目标,我的web应用程序和jasper像微服务一样工作。我使用rabbitmq将用户详细信息从我的web应用程序传递给jasper。我已经成功地为jasper开发了一个消费者,现在我在组织中创建用户时遇到了麻烦。我遵循jasper的API编写代码。()

我得到了这个错误

java.lang.IllegalArgumentException: This implementation does not support tenants
    at com.jaspersoft.jasperserver.api.metadata.user.service.impl.UserAuthorityServiceImpl.getPersistentTenant(UserAuthorityServiceImpl.java:2029)
    at com.jaspersoft.jasperserver.api.metadata.user.service.impl.UserAuthorityServiceImpl.getRepoUser(UserAuthorityServiceImpl.java:175)
    at com.jaspersoft.jasperserver.api.metadata.user.service.impl.UserAuthorityServiceImpl.getRepoUser(UserAuthorityServiceImpl.java:232)
    at com.jaspersoft.jasperserver.api.metadata.user.service.impl.UserAuthorityServiceImpl.doPutUser(UserAuthorityServiceImpl.java:327)
    at com.jaspersoft.jasperserver.api.metadata.user.service.impl.UserAuthorityServiceImpl.putUser(UserAuthorityServiceImpl.java:316)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
我只是有以下的课程

UserConsumer.java

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UsersConsumer implements MessageListener {

    @Autowired
    JasperUserManager jasperUserManager;

    @Override
    public void onMessage(Message message) {
        try {
            System.out.println("==========MESSAGE========>>>>>>>>>> : "+message.toString());
            jasperUserManager.saveUser();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
import com.jaspersoft.jasperserver.api.common.domain.ExecutionContext;
import com.jaspersoft.jasperserver.api.metadata.user.domain.User;
import com.jaspersoft.jasperserver.api.metadata.user.service.ObjectPermissionService;
import com.jaspersoft.jasperserver.api.metadata.user.service.UserAuthorityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class JasperUserManagerImpl implements JasperUserManager {

    @Autowired
    private UserAuthorityService userAuthorityService;

    @Override
    public void saveUser() {
        User user = userAuthorityService.newUser(null);
        user.setUsername("thusira");
        user.setTenantId("ACT");
        user.setPassword("123");
        user.setFullName("Thusira Dissanayake");
        user.setEnabled(true);
        user.setExternallyDefined(false);
        userAuthorityService.putUser(null, user);
        System.out.println("================SSSSSSSSSUUCESSS================================");
    }

}
JasperUserManager.java

import org.springframework.amqp.core.Message;
import org.springframework.amqp.core.MessageListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

@Component
public class UsersConsumer implements MessageListener {

    @Autowired
    JasperUserManager jasperUserManager;

    @Override
    public void onMessage(Message message) {
        try {
            System.out.println("==========MESSAGE========>>>>>>>>>> : "+message.toString());
            jasperUserManager.saveUser();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}
import com.jaspersoft.jasperserver.api.common.domain.ExecutionContext;
import com.jaspersoft.jasperserver.api.metadata.user.domain.User;
import com.jaspersoft.jasperserver.api.metadata.user.service.ObjectPermissionService;
import com.jaspersoft.jasperserver.api.metadata.user.service.UserAuthorityService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

@Component
public class JasperUserManagerImpl implements JasperUserManager {

    @Autowired
    private UserAuthorityService userAuthorityService;

    @Override
    public void saveUser() {
        User user = userAuthorityService.newUser(null);
        user.setUsername("thusira");
        user.setTenantId("ACT");
        user.setPassword("123");
        user.setFullName("Thusira Dissanayake");
        user.setEnabled(true);
        user.setExternallyDefined(false);
        userAuthorityService.putUser(null, user);
        System.out.println("================SSSSSSSSSUUCESSS================================");
    }

}
请帮助我在我的实施中会遇到什么问题

先谢谢你

比尔, 图西拉

使用MTUserAuthorityService后,出现此异常

org.springframework.security.authentication.AuthenticationCredentialsNotFoundException: An Authentication object was not found in the SecurityContext
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.credentialsNotFound(AbstractSecurityInterceptor.java:339)
    at org.springframework.security.access.intercept.AbstractSecurityInterceptor.beforeInvocation(AbstractSecurityInterceptor.java:198)
    at org.springframework.security.access.intercept.aopalliance.MethodSecurityInterceptor.invoke(MethodSecurityInterceptor.java:60)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy70.putUser(Unknown Source)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:497)
    at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
    at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:91)
    at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
    at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
    at com.sun.proxy.$Proxy70.putUser(Unknown Source)
    at com.cinglevue.veip.report.users.JasperUserManagerImpl.saveUser(JasperUserManagerImpl.java:33)
    at com.cinglevue.veip.report.users.UsersConsumer.onMessage(UsersConsumer.java:20)

问题在于
UserAuthorityService
有两种实现。其中之一是一个简单的
UserAuthorityServiceImpl
,它不了解租户的任何信息,而不像
MTUserAuthorityServiceImpl
可以将用户与租户一起保存

  • 因此,首先应该检查XML配置
    js.spring.properties
    应包含以下行:
    bean.userAuthorityService=mtUserAuthorityService

  • 作为第二种方法,您可以直接注入
    MTUserAuthorityServiceImpl
    bean。 例如:

@组件
公共类JasperUserManagerImpl实现JasperUserManager{
@资源(名称=“”)
私人用户授权服务用户授权服务;
@凌驾
public void saveUser(){
User User=userAuthorityService.newUser(null);
user.setUsername(“thusira”);
user.setTenantId(“ACT”);
user.setPassword(“123”);
user.setFullName(“Thusira Dissanayake”);
user.setEnabled(true);
user.setExternallyDefined(false);
userAuthorityService.putUser(null,user);
}
}
  • 在最后一种情况下,您可能没有jasperservermultipletennancy许可证(例如,如果您使用社区版),因此,您根本无法使用租户
您好,谢谢,我实际上使用了MTUserAuthorityServiceImpl,它给了我一个异常“org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:在SecurityContext中找不到身份验证对象”您能给我完整的堆栈跟踪吗?我已添加到问题中。请在上面查找。我认为您在保存用户时未获得授权。尝试调用
SecurityContextHolder.getContext().getAuthentication()
检查您是否登录。如果您未经授权,您可以通过
userAuthorityService.makeUserLoggedIn(superuser)
登录。非常感谢您的评论。我不知道我们有办法使用,我重新发明了轮子。成功了。