我正在开发具有许多不同形式的GWT
应用程序。这些表单的可见性取决于授权用户的类型。换句话说,我想做以下事情:
String type = rpc.getUserType(); // ask from server only ONCE
if(type.equals("advancedUser"))
{
ContentPanel advPanel= new ContentPanel();
add(advPanel);
}
if(type.equals("admin"))
{
ContentPanel adminPanel= new ContentPanel();
add(adminPanel);
}
我的问题如下: 从服务器只获取一次用户类型并在任何地方安全使用此变量?我的意思是有没有可能改变这个变量(如果它存储在客户端)?
我的朋友告诉我GWT在服务器端准备html,所以我可以安全地将类型存储在一个变量中并使用它 - 没有人可以访问它。
但我想,我必须在每个构造之前调用rpc,如if(userType=blah-blah-blah) add(something)
,因为我认为GWT将我的Java代码转换为在客户端运行的Javascript,并且所有变量都可以可以使用ArtMoney等程序进行修改。
答案 0 :(得分:1)
我的问题如下:从服务器获取用户类型只一次,并且在任何地方使用此变量都是安全的吗?我的意思是有没有可能改变这个变量(如果它存储在客户端)?
是的,这是最可能和最强大的解决方案。更多我想建议,把它static
public static String USER_TYPE = rpc.getUserType();
该变量应该使用onModuleLoad
的第一个值初始化,并且应该在整个应用程序中。
但我认为,我必须在每个构造之前调用rpc,如if(userType = blah-blah-blah)add(something)
否则会通过网络引发性能问题和不必要的server
调用。
因为我认为GWT将我的Java代码转换为在客户端运行的Javascript,所有变量都可以使用ArtMoney等程序进行修改。
GWT足够安全并使用混淆选项编译您的模块,这使您的代码在浏览器中无法读取。
单独使用混淆可以防止所有易受伤害的事情,还有一些其他步骤也需要采取睡眠快乐:)
我建议通过GWT security documentation。
除此之外,
在服务器端保存或处理数据时,需要严格按照客户端进行检查,以避免出现这种情况。
在服务器端
if(clientsideUserType.equals(serverSideUserType)) //
{
// Then only insert/process data
}