我有一个基于 GWT 的应用程序。我想为其添加访问控制。有没有办法为 GWT 组件添加自定义访问控制?
我关于添加访问控制/权限的想法如下。
- 将访问控制注释(如果存在)添加到我需要为其添加访问控制的类(GWT 组件)。
- 当这个组件被渲染时,我的用于检查访问控制规则的自定义方法被调用,并根据它的结果渲染组件。
关于如何实现这一点的任何想法。
我有一个基于 GWT 的应用程序。我想为其添加访问控制。有没有办法为 GWT 组件添加自定义访问控制?
我关于添加访问控制/权限的想法如下。
关于如何实现这一点的任何想法。
在 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 来完成)。