Liferay 6에서는 *LocalServiceUtil
정적 호출을 사용하는 것이 일반적이었습니다. Liferay 7에서 시작하여,이 호출은 OSGi 서비스를 @Reference
에 사용하는 것을 피하고, 올바르게 이해하면 (나 수정 가능)."PrincipalException : PermissionChecker가 초기화되지 않았습니다."Liferay 7 방식
문제 :
com.liferay.portal.kernel.security.auth.PrincipalException:
PermissionChecker not initialized
at com.liferay.portal.kernel.service.BaseServiceImpl.getPermissionChecker
at com.liferay.portal.service.impl.UserServiceImpl.getUserById
어떻게 그것을 해결하기 위해 : 나는은 OSGi 친화적 동등한 내 오래된 *LocalServiceUtil
전화를 교체 할 때, 나는이 예외가?
나는 UserLocalServiceUtil.getRoleUsers(RoleLocalServiceUtil.getRole(company.getCompanyId(),"Administrator").getRoleId())
의 OSGi 프레임 동등한를 통해 임의의 관리를 얻고 PermissionThreadLocal.setPermissionChecker(PermissionCheckerFactoryUtil.create(randomAdmin))
의 OSGi의 동등한에서 사용하지만 매우 해키 소리, 플러스는이 불운 관리자의 어깨에 내 코드의 행동에 대한 책임을 둘 것입니다 수 있습니다.
내 코드 :
protected void myMethod() {
userService.getUserById(userId);
}
@Reference(unbind = "-")
protected com.liferay.portal.kernel.service.UserService userService;