在基于GWT的应用程序中添加访问控制

时间:2010-09-29 06:15:42

标签: java design-patterns gwt access-control

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

我对添加访问控制/权限的想法如下:

  1. 向我需要添加访问控制的类(GWT组件)添加访问控制注释(如果存在)。
  2. 当渲染此组件时,将调用检查访问控制规则的自定义方法,并根据其结果呈现组件。
  3. 有关如何实现这一目标的任何想法。

1 个答案:

答案 0 :(得分:3)

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

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

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

使用bog标准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)。