我有一个GWT应用程序,设计有单个类的模式,加载不同的“屏幕”,基本上是各种复合小部件,代表我的应用程序的不同页面。
public enum ContentContainer {
INSTANCE;
public void setContent(Composite content) {
RootPanel.get("content").clear();
RootPanel.get("content").add(content);
}
}
我正在使用Apache Shiro执行身份验证。
我应该使用哪些设计模式来要求我的几个“屏幕”要求用户进行身份验证?我目前正在考虑在单例setAuthenticatedContent()
中使用第二种方法,它将检查用户是否已登录。但是,这对我来说似乎非常不优雅,因为我必须确保每一个允许我输入需要身份验证的屏幕的链接/按钮通过setAuthenticatedContent()
代替setContent()
。
我还没有想到更好的方法吗?
答案 0 :(得分:0)
如果有第二个单例存储用户是否登录?然后,您的setContent
方法可以引用此内容并依赖于呈现内容。
或者只是在现有的单例中声明一个static
变量来存储这些信息。
答案 1 :(得分:0)
使用Dependency Injection
(Gin)将单个对象(即CurrentUser.class
)注入需要访问信息的所有组件。
您的CurrentUser.cass
包含用户是否已登录以及用户角色(ADMIN,USER等)的信息。
为了填充您的CurrentUser.class
,您可以向后端发送请求(使用RPC
,RequestFactory
或RequestBuilder
)或我建议使用{ {3}}接近并让后端将用户信息呈现到HTML主页中
在onModuleLoad
方法中,您可以使用Dictonary
或JSNI
从HTML主页中检索信息。
重要:此appraoch仅用于显示和隐藏UI控件。当用户实际执行UI操作时,如果用户有权执行操作,则始终必须检查后端。
恶意用户可以修改客户端上的CurrentUser.class
实例。