PrincipalException:Principal为null

时间:2017-05-30 11:26:57

标签: liferay liferay-7

(注意:由于缺乏答案,我还发布了same question to the Liferay forum

我想在Liferay 7中创建一个file entry

DLAppServiceUtil.addFileEntry(
    34613, // groupId
    0, // folderId
    "hello.txt",
    "text/plain",
    "title",
    "description",
    "changeLog",
    new File("hello.txt"),
    new ServiceContext()
);

结果:

com.liferay.portal.kernel.security.auth.PrincipalException: Principal is null
    at com.liferay.portal.kernel.service.BaseServiceImpl.getUserId(BaseServiceImpl.java:95)
    at com.liferay.portlet.documentlibrary.service.impl.DLAppServiceImpl.addFileEntry(DLAppServiceImpl.java:292)
    at com.liferay.portlet.documentlibrary.service.impl.DLAppServiceImpl.addFileEntry(DLAppServiceImpl.java:202)
    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:498)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:163)
    at com.liferay.portal.spring.transaction.DefaultTransactionExecutor.execute(DefaultTransactionExecutor.java:54)
    at com.liferay.portal.spring.transaction.TransactionInterceptor.invoke(TransactionInterceptor.java:58)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:137)
    at com.liferay.portal.service.ServiceContextAdvice.invoke(ServiceContextAdvice.java:51)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:137)
    at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:137)
    at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:137)
    at com.liferay.portal.spring.aop.ChainableMethodAdvice.invoke(ChainableMethodAdvice.java:56)
    at com.liferay.portal.spring.aop.ServiceBeanMethodInvocation.proceed(ServiceBeanMethodInvocation.java:137)
    at com.liferay.portal.spring.aop.ServiceBeanAopProxy.invoke(ServiceBeanAopProxy.java:169)
    at com.sun.proxy.$Proxy129.addFileEntry(Unknown Source)
    at com.liferay.document.library.kernel.service.DLAppServiceUtil.addFileEntry(DLAppServiceUtil.java:235)

Liferay的源代码部分引发了异常:

public long getUserId() throws PrincipalException {
    String name = PrincipalThreadLocal.getName();
    if (Validator.isNull(name)) {
        throw new PrincipalException("Principal is null");
    }

我应该在调用该方法之前尝试执行PrincipalThreadLocal.setName吗?这听起来有风险,所以我相信还有更好的方法吗? (实际上我尝试了,这导致了进一步的PrincipalException: PermissionChecker not initialized

0 个答案:

没有答案