在项目中需要保存客户的信息到Cookie中,因为客户要求针对常用业务操作的操作,用户可以一次设置之后,可以长时间的使用,即使下次登录,客户仍然使用可以使用。在客户登陆需要用户常用业务操作时,首先从Session中获取,如果Session中不存在,从Cookie获取,然后转换为需要的类型。
保存信息一般的可以
有两种设计方案:
(1)将客户的常用设置信息保存数据库
(2)将客户的属性保存本地的Cookie中下次登录时获取。
本人使用Cookie保存信息,客户设置信息,在Struts2 中 Action获取时采用模型驱动(ModenDriver方式),获取设置不是很方便。
在项目的开始本人想保存信息到Cookie,下次登录时从Cookie中获取各字段同时,使用反射转换为相应的数据类型(如枚举,Long等数据类型),之后发现使用json简单,同时减少了使用反射的不安全性。简化了各种操作。
于是本人采用JSon保存信息,将获得客户的设置信息的对象转换为json格式的字符串之后,保存到Cookie中,在用户下载登陆时可以从Cookie中获取。
备注:在存储JSON格式的字符串时必须将双引号转换为单引号,不然获取不到完整的数据。因为字符串是以双引号分割。项目中使用JSON将对象转换为字符串:
/**
* 将一个bean 对象转换为jsonobject对象的字符串
*
* @param ignoreJPATransient 是否忽略的输入的属性
* @param excludes 对象中字符串属性数组
* @param object 需要使用json持久化的对象
* @return
*/
private String jsonBuilder(boolean ignoreJPATransient, String[] excludes, Object object) {
JsonConfig jsonConfig = new JsonConfig();
jsonConfig.setIgnoreJPATransient(ignoreJPATransient);
jsonConfig.setExcludes(excludes);
JSONArray json = JSONArray.fromObject(object, jsonConfig);
return json.toString();
}
将json字符串转换为对象的方式:
/**
* 将一个json的字符串转换bean对象
*/
private VacationOrderConditionConvertor json2BeanfromCookie() {
//从Cookie中获取数据
String jsonCookies = (String) cookies.get(DEFAULT_USE_QUERY_TYPE_COOKIE);
if (StringUtils.isNotBlank(jsonCookies)) {
// 从JSON字符串转换Bean对象
//备注将json对象存储到Cookie中时由于字符串中有特殊字符串,Cookie中将json对象添加
jsonCookies = jsonCookies.substring(1, jsonCookies.length() - 1);
JSONObject json = JSONObject.fromObject(jsonCookies);
VacationOrderConditionConvertor tmpvc = (VacationOrderConditionConvertor) JSONObject.toBean(json, VacationOrderConditionConvertor.class);
return tmpvc;
}
return null;
}