2

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

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

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

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

4

1 回答 1

3

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

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

/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 来完成)。

于 2010-11-21T09:00:43.727 回答