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

Java 在基于GWT的应用程序中添加访问控制,java,design-patterns,gwt,access-control,Java,Design Patterns,Gwt,Access Control,我有一个基于GWT的应用程序。我想给它添加访问控制。有没有办法为GWT组件添加自定义访问控制 关于添加访问控制/权限,我的想法如下 向我需要添加访问控制的类(GWT组件)添加访问控制注释(如果存在) 当呈现此组件时,将调用检查访问控制规则的自定义方法,并根据其结果呈现组件 任何关于如何实现这一点的想法。在GWT应用程序中,我用两种方法进行了访问控制,都假设在服务器上强制执行访问控制——在每次AJAX(GWT RPC)调用中。javascript端本质上是不安全的,因此那里的任何控件都是毫无意义的

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

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

  • 向我需要添加访问控制的类(GWT组件)添加访问控制注释(如果存在)
  • 当呈现此组件时,将调用检查访问控制规则的自定义方法,并根据其结果呈现组件

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

    在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等),在这里我可以连接我的自定义逻辑。