检查用户是否在GWT应用程序中进行身份验证的最佳方法是什么?

时间:2013-07-28 03:50:17

标签: java security gwt

我有一个GWT应用程序,设计有单个类的模式,加载不同的“屏幕”,基本上是各种复合小部件,代表我的应用程序的不同页面。

public enum ContentContainer {

    INSTANCE;

    public void setContent(Composite content) {
        RootPanel.get("content").clear();
        RootPanel.get("content").add(content);
    }
}

我正在使用Apache Shiro执行身份验证。

我应该使用哪些设计模式来要求我的几个“屏幕”要求用户进行身份验证?我目前正在考虑在单例setAuthenticatedContent()中使用第二种方法,它将检查用户是否已登录。但是,这对我来说似乎非常不优雅,因为我必须确保每一个允许我输入需要身份验证的屏幕的链接/按钮通过setAuthenticatedContent()代替setContent()

我还没有想到更好的方法吗?

2 个答案:

答案 0 :(得分:0)

如果有第二个单例存储用户是否登录?然后,您的setContent方法可以引用此内容并依赖于呈现内容。

或者只是在现有的单例中声明一个static变量来存储这些信息。

答案 1 :(得分:0)

使用Dependency Injection(Gin)将单个对象(即CurrentUser.class)注入需要访问信息的所有组件。
您的CurrentUser.cass包含用户是否已登录以及用户角色(ADMIN,USER等)的信息。

为了填充您的CurrentUser.class,您可以向后端发送请求(使用RPCRequestFactoryRequestBuilder)或我建议使用{ {3}}接近并让后端将用户信息呈现到HTML主页中 在onModuleLoad方法中,您可以使用DictonaryJSNI从HTML主页中检索信息。

重要:此appraoch仅用于显示和隐藏UI控件。当用户实际执行UI操作时,如果用户有权执行操作,则始终必须检查后端。 恶意用户可以修改客户端上的CurrentUser.class实例。