KeyFactory.keyToString 字符串表示看起来已经加密
例子:
...
Key key = KeyFactory.stringToKey("ag1zYW50b21lcmNhZG9zcgoLEgRUcmVlGAEM");
try {
Entity entity = datastoreService.get(key);
} catch (EntityNotFoundException e) {
map.addAttribute("EntityNotFoundException", e.getMessage());
map.addAttribute("status", false);
}
...
private ModelMap organizeData(Entity entity){
Map properties = entity.getProperties();
Key key = entity.getKey();
String key_string = KeyFactory.keyToString(key);
ModelMap data = new ModelMap();
data.addAttribute("properties", properties);
data.addAttribute("keyString", key_string);
return data;
}
public ArrayList<ModelMap> getTree() {
ArrayList<ModelMap> treeLists = new ArrayList<ModelMap>();
Query query = new Query("Tree");
query.addSort("left", Query.SortDirection.ASCENDING);
for(Entity entity:datastoreService.prepare(query).asIterable()){
// Todo -> Organize Data as ModelMap Obj
ModelMap model = organizeData(entity);
treeLists.add(model);
}
return treeLists;
}
我问因为在
https://developers.google.com/appengine/docs/java/datastore/entities
键的字符串表示是“网络安全的”:它不包含在 HTML 或 URL 中被视为特殊的字符。
注意:KeyFactory.keyToString 方法与 Key.toString 不同,后者返回适合在调试和日志记录中使用的人类可读字符串。如果您需要一个可以转换为可用键的字符串值,请使用 KeyFactory.keyToString。
另请注意,密钥的字符串表示形式未加密:用户可以解码密钥字符串以提取其组件,包括实体及其祖先的种类和标识符。如果向用户隐藏此信息很重要,您必须自己加密密钥字符串,然后再将其发送给用户。
他们指的是 Key.toString?
因为我将这个 JSON 发送给客户端布局
[
{
"properties":{
"parent":null,
"left":1,
"right":2,
"name":"laptops"
},
"keyString":"ag1zYW50b21lcmNhZG9zcgoLEgRUcmVlGAEM"
},
{
"properties":{
"parent":null,
"left":3,
"right":4,
"name":"Pc"
},
"keyString":"ag1zYW50b21lcmNhZG9zcgoLEgRUcmVlGAIM"
}
...
使用 keyString 安全吗?