Java 在基于GWT的应用程序中添加访问控制
我有一个基于GWT的应用程序。我想给它添加访问控制。有没有办法为GWT组件添加自定义访问控制 关于添加访问控制/权限,我的想法如下Java 在基于GWT的应用程序中添加访问控制,java,design-patterns,gwt,access-control,Java,Design Patterns,Gwt,Access Control,我有一个基于GWT的应用程序。我想给它添加访问控制。有没有办法为GWT组件添加自定义访问控制 关于添加访问控制/权限,我的想法如下 向我需要添加访问控制的类(GWT组件)添加访问控制注释(如果存在) 当呈现此组件时,将调用检查访问控制规则的自定义方法,并根据其结果呈现组件 任何关于如何实现这一点的想法。在GWT应用程序中,我用两种方法进行了访问控制,都假设在服务器上强制执行访问控制——在每次AJAX(GWT RPC)调用中。javascript端本质上是不安全的,因此那里的任何控件都是毫无意义的
任何关于如何实现这一点的想法。在GWT应用程序中,我用两种方法进行了访问控制,都假设在服务器上强制执行访问控制——在每次AJAX(GWT RPC)调用中。javascript端本质上是不安全的,因此那里的任何控件都是毫无意义的 根据我需要的细粒度访问控制的程度,我使用了servlet容器保护GWT RPC端点的基于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);
}
接口MyService扩展了RemoteService{
SomeData getPublicData();
SomeSecret getPrivateData()抛出AccessDeniedException;
结果登录(字符串用户名、字符串密码);
}
接口MyServiceAsync{
void getPublicData(异步回调);
void getPrivateData(异步回调);
无效登录(字符串用户名、字符串密码、异步回调);
}
通过使AccessDeniedException RPC可序列化,我将在AsyncCallback中接收该异常-这使得在GWT应用程序中抛出登录对话框成为可能
然而,实际的登录调用和服务器端会话处理我已经完全手动完成,不依赖任何框架(尽管您可以使用Spring Security来完成)。重复-简而言之,使用decorator模式。我已经完成了该线程,但在我的案例中没有发现它有用。我尝试使用decorator模式向GWT的Widget类添加访问控制,但是Widget类没有公开它的生命周期方法(onAttach、onLoad等),在这里我可以连接我的自定义逻辑。