Liferay 7 角色/权限问题:您没有访问此 portlet 所需的角色

Liferay 7 Role/ Permission issue : You do not have the roles required to access this portlet

我在 Liferay 7.3.0 中创建了一个 PortletMVC,它在 Tomcat9 中成功部署,但是当我将它拖到门户中时,我看不到它,显示的消息如下:

" You do not have the roles required to access this portlet.
" 

[图片]

我检查了页面的权限public,访客可以查看,

有什么不对的地方可以帮忙看看谢谢。 这是类控制器:

@Component(
    immediate = true, 
    property = {
            "path=/login/login",
            "javax.portlet.security-role-ref=guest,power-user,user",
    },
    service = StrutsPortletAction.class
)
public class BladePortletAction extends BaseStrutsPortletAction {

    @Override
    public void processAction(
            StrutsPortletAction originalStrutsPortletAction,
            PortletConfig portletConfig, ActionRequest actionRequest,
            ActionResponse actionResponse)
        throws Exception {....}

控制台显示:

[SecurityPortletContainerWrapper:235] Invalid portlet ID /app_WAR_app

从你的代码中我可以看出你正在使用: BaseStrutsPortletAction 但它与 MVCPortlet 不同。 请注意,从 Liferay 7.0 开始,BaseStrutsPortletAction 机制不再适用于大多数 portlet,因为 Liferay 不再使用 Struts Actions,而是使用 Liferay MVCCommands,参见:

https://help.liferay.com/hc/en-us/articles/360029005292-Upgrading-Struts-Action-Hooks https://liferay.dev/forums/-/message_boards/message/96576834

我推荐使用 Liferay Developer Studio,这样您就可以在 portlet 开发过程中看到哪些 classes/methods 可用。

如果您需要进一步的帮助,我很乐意提供帮助,请发送更详细的信息,例如:您想要实现的目标,以及更详细的步骤,例如:

  1. 从以下位置下载了 Liferay 门户:https://sourceforge.net/projects/lportal/files/Liferay%20Portal/7.3.0%20GA1/liferay-ce-portal-tomcat-7.3.0-ga1-20200127150653953.tar.gz/download
  2. 已执行:
    blade更新
    mkdir lr_workspace
    blade 初始化
  3. 编辑:gradle.properties 并确保它包含 Liferay 7.3.0 特定值: liferay.version.default=7.3 profile.name=gradle liferay.workspace.bundle.url=https://releases-cdn.liferay.com/portal/7.3.0-ga1/liferay-ce-portal-tomcat-7.3.0-ga1-20200127150653953.tar.gz app.server.tomcat.version=9.0.33 liferay.workspace.target.platform.version=7.3.0 target.platform.index.sources=假
  4. 通过执行创建我的 Portlet: blade 创建-t mvc-portlet -v 7.3 -p com.liferay.test MVCPortlet7303

等等
亲切的问候,
彼得

如错误所述:

[SecurityPortletContainerWrapper:235] Invalid portlet ID /app_WAR_app

您还没有将唯一的 ID 附加到您的 portlet,您应该知道在 Liferay 中,每个 portlet 都有一个唯一的 ID (KEY) 使用 属性 javax.portlet.name

以这段代码为例:

@Component(
        immediate = true,
        property = {
                "javax.portlet.name=com_fr_bladeExamplePortlet"
        },
        properties = "OSGI-INF/portlet.properties",
        service = Portlet.class
)
public class SearchPortlet extends MVCPortlet {
}

如果您正在使用 Liferay DXP,我建议您使用 MVCPortlet,它简单、轻便、有效且易于使用。

Liferay MVC Porlet

此致,