【问题标题】:User roles in GWT applicationsGWT 应用程序中的用户角色
【发布时间】:2011-07-07 21:50:00
【问题描述】:

我想知道您是否可以建议我在 GWT 应用程序中实现“用户角色”的任何方法。我想实现一个 GWT 应用程序,用户登录并被分配“角色”。根据他们的角色,他们将能够看到和使用不同的应用领域。

我认为有两种可能的解决方案:

1) 一种可能的解决方案是在 onModuleLoad 期间对服务器进行 RPC 调用。此 RPC 调用将生成必要的小部件和/或将它们放置在面板上,然后将该面板返回给客户端。

2) 另一种可能的解决方案是在登录时进行 RPC 调用,从服务器用户角色中检索并检查它们以查看用户可以做什么。

你怎么看?

非常感谢您的帮助!

【问题讨论】:

    标签: gwt user-interface user-roles


    【解决方案1】:

    以下方案适用于我:

    1. GWT 应用程序落后于安全约束。
    2. 在加载模块时,我进行 RPC 调用以从容器中检索角色。我将它们作为静态字段存储在主 GWT 模块的类中,以方便其他类使用它。
    3. 每个小部件(尤其是菜单)都可以使用角色(例如调用 Main.getRoles())并根据角色构建自己。我不在构造函数中传递角色。每个小部件都知道如何根据角色表现。

    如果不仅隐藏内容而且强制执行它们至关重要,那么您可以使用容器安全性并在调用业务方法时检查角色和权限。

    在使用 GIN 时,您还可以创建单例类来存储在登录期间检索到的角色并将其注入到您需要的任何地方。

    【讨论】:

    • 谢谢 jgrabowski。你如何存储角色?它们是分配给用户组的角色列表?那么,一个键值表?
    • 我也在考虑像 Apache Shiro 和 Spring Security 这样的 java 安全框架......你觉得它们怎么样?
    • 不,我没有为用户组分配角色。我正在为用户分配角色。所以我有 USERS 表和 ROLES 表。 Roles 表包含 USER_ID 和 ROLE 列。
    【解决方案2】:

    另一种方法是在 JSP 页面中托管您的 GWT 应用程序。您的 JSP 可能包含这样的 sn-p 代码

    <script type="text/javascript">
    var role = unescape("${role}");
    </script>
    

    其中 ${role} 是表达式语言,它从您从关联的 servlet/控制器计算的值扩展并暴露给 JSP。

    当您的 GWT 应用程序在浏览器中运行时,该值将被填写。您的 GWT 应用可以轻松调用 JS 以从本地方法调用中获取此值,例如

    public native String getRole() { /*-{ return $wnd.role; }-*/;
    

    因此您的模块可以调用 getRole(),测试该值并执行它喜欢的隐藏/显示元素的操作。

    显然,您的后端还应该强制执行该角色(例如,通过将其存储在会话中并在适当的情况下对其进行测试),因为有人可以通过 JS 调试器运行页面,设置断点或类似的方式在评估之前修改值允许他们访问他们不应该访问的东西。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-28
      • 2019-03-16
      • 2017-03-02
      • 2017-12-30
      • 2018-10-08
      • 2017-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多