2017-04-04 98 views
0

我想实现一个目标,我的Web应用程序和碧玉正在像微服务一样工作。我使用rabbitmq将用户的详细信息从我的web应用程序传递给jasper。我已经成功地为碧玉开发了一个消费者,现在我在组织中创建用户时遇到了麻烦。我跟着碧玉的API,写我的代码。(Users and Roles 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(); 
     } 
    } 

} 

JasperUserManager.java

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================================"); 
    } 

} 

请帮我这将是我在执行的问题。

预先感谢您

BR, Thusira

使用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) 

回答

1

的问题是,UserAuthorityService有两种实现方法。其中之一是一个简单的UserAuthorityServiceImpl,它不知道任何关于租户的信息,而不像MTUserAuthorityServiceImpl那样可以为租户保存用户。

  • 所以首先你应该检查你的XML配置。 js.spring.properties应该有这样一行: bean.userAuthorityService=mtUserAuthorityService

  • 至于第二种方法,你可以直接注入MTUserAuthorityServiceImpl豆。 例如以这种方式:

@Component 
public class JasperUserManagerImpl implements JasperUserManager { 

    @Resource(name="") 
    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); 
    } 
} 
  • 而在最后一种情况下,你可能没有的JasperServer MultipleTenancy许可证(例如,如果您有社区版工作)和作为结果,你可以根本不和租户合作。
+0

感谢大家好,我实际使用MTUserAuthorityServiceImpl,这让我这个异常“org.springframework.security.authentication.AuthenticationCredentialsNotFoundException:认证对象未在SecurityContext中 发现” –

+0

你能不能给我完整的堆栈跟踪? –

+0

我已添加到问题中。请在上面找到它。 –