When a portlet uses the StrutsPortlet controler it has to create an entry called struts-path in its definition within liferay-portlet.xml. If the developer forgets or writes the wrong one (for example because of a typo) the portlet cannot be seen and shows an error saying that the user does not have enough permissions.
This message might be ok for the user but is misleading to the developer, and can lead to a lot of lost time and headaches (I must confess it just happened to me). I suggest adding at least a trace log just before throwing the PrincipalException in PortletRequestProcessor line 318 such as:
log.warn(
"The struts path " + strutsPath + " does not belong" +
" to portlet " + portlet.getPortletId() + ". Check " +
" the definition in liferay-portlet.xml");