【问题标题】:Adding access control in GWT based applications在基于 GWT 的应用程序中添加访问控制
【发布时间】:2010-11-21 17:00:43
【问题描述】:

我有一个基于 GWT 的应用程序。我想为其添加访问控制。有没有办法为 GWT 组件添加自定义访问控制?

我关于添加访问控制/权限的想法如下。

  1. 将访问控制注释(如果存在)添加到我需要为其添加访问控制的类(GWT 组件)。
  2. 当这个组件被渲染时,我的用于检查访问控制规则的自定义方法被调用,并根据它的结果渲染组件。

关于如何实现这一点的任何想法。

【问题讨论】:

  • 复制stackoverflow.com/questions/3184981/… - 简而言之,使用装饰器模式。
  • 我已经浏览了该线程,但在我的情况下找不到它有用。我尝试使用装饰器模式向 GWT 的 Widget 类添加访问控制,但 Widget 类没有公开它的生命周期方法(onAttach、onLoad 等),我可以在其中连接我的自定义逻辑。

标签: java design-patterns gwt access-control


【解决方案1】:

在 GWT 应用程序中,我通过两种方式完成了访问控制,都假定在服务器上强制执行访问控制 - 在每个 AJAX (GWT RPC) 调用中。 javascript 端本质上是不安全的,因此那里的任何控制都是毫无意义的。

根据我需要的细粒度访问控制,我要么使用保护 GWT RPC 端点的 servlet 容器的基于 URL 的控制。即

/public/gwt.rpc.endpoint
/private/gwt.rpc.endpoint

使用沼泽标准 web.xml 或 spring security 保护私有的。然而,这导致我在启动 GWT 应用程序之前以“正常”的基于表单的方式处理登录。

更细粒度的方法是在每个 GWT RPC 公开的方法上使用异常:

interface MyService extends RemoteService {
  SomeData getPublicData();
  SomeSecret getPrivateData() throws AccessDeniedException; 
  Result login(String username, String password);
}

interface MyServiceAsync {
  void getPublicData(AsyncCallback<SomeData> callback);
  void getPrivateData(AsyncCallback<SomeSecret> callback);
  void login(String username, String password, AsyncCallback<Result> callback);
}

通过使 AccessDeniedException RPC 可序列化,我将在 AsyncCallback 中接收到该异常 - 这使得在 GWT 应用程序中抛出一个登录对话框成为可能。

然而,实际的登录调用和服务器端会话处理我已经完全手动完成,不依赖任何框架(尽管您可以使用 Spring Security 来完成)。

【讨论】:

    猜你喜欢
    • 2015-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 2013-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多