2017-04-04 70 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

我已添加到問題中。請在上面找到它。 –