在基于GWT的应用程序中添加访问控制
问题描述:
我有一个基于GWT的应用程序。我想添加访问控制。有没有办法为GWT组件添加自定义访问控制?在基于GWT的应用程序中添加访问控制
我对增加访问控制/权限的想法如下。
- 向需要添加访问控制的类(GWT组件)添加访问控制注释(如果存在的话)。
- 当这个组件被渲染时,我的自定义方法检查访问控制规则被调用,并根据它的结果组件被渲染。
关于如何实现这一点的任何想法。
答
在一个GWT应用程序中,我已经完成访问控制两种方式,都假设访问控制在服务器上执行 - 在每个AJAX(GWT RPC)调用中。 JavaScript方面本质上是不安全的,所以任何控制都是毫无意义的。
根据我所需要的细粒度访问控制的方式,我通过保护GWT RPC端点的servlet容器使用了基于URL的控制。即
/public/gwt.rpc.endpoint
/private/gwt.rpc.endpoint
使用bog标准web.xml或spring安全性来保护私有文件。然而这导致我在启动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来完成)。
重复http://stackoverflow.com/questions/3184981/design-patterns-for-enabling-user-interface-elements-based-on-user-permissions - 总之,使用装饰模式。 – 2010-09-29 13:41:40
我已经通过该线程,但无法找到它在我的情况有用。我尝试使用装饰器模式将访问控制添加到Widget类的GWT中,但Widget类不公开它的生命周期方法(onAttach,onLoad等),在那里我可以连接我的自定义逻辑。 – 2010-09-29 19:08:47