【问题标题】:Liferay changing the default redirect page when a does not have the specific role当 a 不具有特定角色时,Liferay 更改默认重定向页面
【发布时间】:2012-05-16 02:12:28
【问题描述】:

这基本上是两个问题?首先,我想知道当用户尝试访问具有高级用户查看权限的页面时如何更改页面 liferay 重定向。 Liferay 默认指向 localhost:web/guest/home 他们有他们的登录页面。在我的应用程序中,我有一个不同的登录页面,我想重定向到以下页面。我正在浏览网页,发现通过设置 auth.login.site.url=/whereiwontittopoint 实际上应该将我重定向到那里。然而事实并非如此。我正在使用 Liferay 6.0.6 社区版。有人做过吗?这是正确的方法还是需要用钩子来完成?

我的另一个问题如下。我想在某些页面上有一个自定义角色。而且我希望当用户没有该特定角色时被重定向到完全不同的页面而不是默认登录。我相当确定这可以通过在某些服务上使用挂钩来完成,但由于某种原因我无法识别该服务。

编辑 好的,第一个问题我解决了问题。对于第二个问题,我在这里得到的答案不是我想要的,可能是因为我没有正确发布问题。这是我所做的和需要做的完整场景:

首先,我将每个 liferay 页面上的 /web/guest 路径更改为 web/somthing/,这可能不会起到关键作用,但问题(一些问题)在发生时就开始了。总体思路如下。我正在使用 spring mvc 来创建应用程序。我已经为我的应用程序创建了一个后端,管理员可以从中创建页面供其他用户查看(这不是通过转到 liferay 的控制面板并添加页面来完成的,而是通过应用程序的逻辑来完成的)。一旦根据某些逻辑创建了一个页面,我就会为该特定页面创建一个角色(客户角色也通过代码而不是 liferay 管理员)。如果满足某些标准而某些不满足,则某些用户将获得此角色。这里我的问题出现了,一旦登录到我的应用程序的用户尝试访问一个页面(通过在浏览器中输入该页面的直接 URL),该页面需要我为该页面创建的角色的查看权限并且用户确实没有适当的角色,他被重定向到 localhost/web/(username)/home 一个个人页面,并且由于某种原因,默认情况下从 liferay 在该页面上,他能够查看所有其他用户的个人数据(用户名)应用程序。我的问题是如何通过代码来处理上述场景发生的重定向。 我曾尝试一次尝试实际挂钩 servlet.service.events.pre 操作,然后在用户访问该页面以检查他是否具有适当的权限并实际更改他的请求。到目前为止,我有一些问题,但我可以解决它们,但这种方法并不是我想要的,因为此操作是在应用程序上的每个请求之前执行的(并且页面处理只是该应用程序的一小部分)这意味着我将无缘无故地执行大量代码。我想知道是否有任何方法可以添加当我创建角色时异常将重定向的位置?如果不是,我应该挂钩什么动作来帮助我解决这种情况,但没有我通过挂钩 servlet.service.events.pre 动作创建的不需要的额外流量?

【问题讨论】:

    标签: liferay liferay-6 liferay-theme


    【解决方案1】:

    对于第二个东西有点hacky的方式可能如下

    1) 定义要在 portal-ext.properties 中检查的角色集。您可以添加一些属性,例如 my.super.secret.roles=rolename1,rolename2

    2) 在 portal-ext.properties 中为重定向页面 url 添加一个属性,以便您可以在那里重定向用户。

    3) 为布局添加一个名为 checkForSecretRoles 的自定义属性,该属性必须是布尔值并且在页面上可见。这将在每个页面的管理页面中显示一个复选框,以便管理员可以轻松地选中或取消选中该值

    4) 在你的主题 (portal_normal.vm) 中添加一个条件来检查页面是否有一个秘密角色检查,然后检查用户角色是否属于 port-ext.properties 中定义的任何角色。如果是,则发出重定向到您的自定义重定向页面 url 属性指定的页面

    【讨论】:

      【解决方案2】:
      1. 对于您的第一个问题,它应该有效 -

        auth.forward.last.paths=/sign-in 
        

        登录将是您的页面名称

      2. 第二个问题的答案是,您必须创建一个 Hook 扩展 Action 并在您的 portal-ext.properties 中创建以下条目。

        login.events.post=com.liferay.portal.events.LoginPostAction,com.liferay.portal.events.CustomLandingPageAction
        

      你可以在论坛上找到很多关于如何使用这个属性的信息。

      【讨论】:

        【解决方案3】:

        1.在portal.properties中设置default.landing.page.path=/whereiwontittopoint,见Liferay Login page redirect

        对于2.创建一个钩子,设置servlet.service.events.post=com.my.action.MyAction并执行此操作,此时您可以将用户重定向到另一个页面。

        【讨论】:

        • 你一定是误会了我。您为我的第一个问题发布的答案是如何设置不同的登录页面。我在问如何更改 liferay 重定向登录的位置。我解决了那个问题,我犯了一个错误,应该使用 auth.login.url = 而不是我使用的那个。
        • 对于第二个问题,该操作将在每个请求之后执行,这在生产中非常昂贵。我在问是否有办法在我定义自定义角色并将其添加到页面时,如果我还可以定义如果尚未获得该角色的用户尝试访问请求该角色的页面,liferay 将做什么。
        • 你可以尝试覆盖错误页面事件servlet.service.events.pre.error.page
        猜你喜欢
        • 1970-01-01
        • 2011-10-17
        • 1970-01-01
        • 2019-10-02
        • 1970-01-01
        • 2013-12-26
        • 2021-11-14
        • 2017-07-18
        • 1970-01-01
        相关资源
        最近更新 更多