10.17sso更新信息页面完善
##一、前端
###1.userManager.jsp
####1.按钮昵称修改 =》 信息修改
userManager.jsp 52行
40行
viewResource.properties
viewResource_zh.properties
viewResource_en.properties
usermanager_information_modify=信息修改
usermanager_information_modify=Change informationhttps://sso.supermap.com/v101/cas/phoneregister?service=https://itest.supermapol.com
2.nicknameModify.jsp
####1.标题昵称修改 =》 信息修改
nicknameModify.jsp 26行
17行
viewResource.properties
viewResource_zh.properties
viewResource_en.properties
information_modify_title=信息修改
information_modify_title=Change information2.新增姓名,单位名
nicknameModify.jsp 57,72行
4-5行
viewResource.properties
viewResource_zh.properties
viewResource_en.properties
common_realName=姓名
common_company=单位名
common_realName=RealName
common_company=company二、后端
D:\supermap\ideaworkspaces\UserAccount\CASManager\src\main\java\com\supermap\icloud\cas\client\AccountManager.java流程
1. 鼠标移开触发焦点事件,
1.检验正则和长度
2.错误提示
3.正确会校验是否存在
1.后端ajax校验存在返回状态
1.成功=》移除错误提示,增加√
2.错误,出现错误提示
3.异常,提示网络异常
2.后端校验
1.接收页面参数对象:AccountManagerParameter,只传了nickname
2.从session获取user
3.页面传的域session对比昵称,一直则返回状态对象
注意:昵称已被使用只是跟自己上一次校验,没有验证数据
1.保存修改
1.form提交事件
2.js检验正则和长度
1.错误,返回false
2.正确###1.相关类
AccountManager.java nicknameModify
AccountManagerService.java postResponseUserInfo
AccountManagerParameter.java
UpdateUserInfoController.java handleRequestInternal
UserService.java updateUserInfo###2.AccountManagerParameter.java
java
/**
* 用户电话
*/
private String realName;
/**
* 用户电话
*/
private String company;###3.CASConstants.java
/**
* 姓名
*/
public final static String REALNAME = "realName";
/**
* 单位名
*/
public final static String COMPANY = "company";###4.AccountManagerService.java
463
paramsMap.put(AccountManagerConstants.NEWUSERINFO, params.getNewNickname());
paramsMap.put(AccountManagerConstants.NEWUSERINFO, JSON.toJSONString(params));//传对象###5.UserService.java
java
594,595行
Map<String,String> newInfoMap = JSONObject.parseObject(newInfo, Map.class);
result = updateNickName(uid, newInfoMap);java
530-572行
/**
* 更新昵称
* @param uid
* @param newNickname
* @return
*/
private UserServiceResult updateNickName(String uid, String newNickname) {
UserServiceResult result = new UserServiceResult();
if (StringUtils.isEmpty(uid) || StringUtils.isEmpty(newNickname)) {
result.setMessageCode(MessageCode.USERSERVICE_NORMAL_REQUESTINCOMPLETE);
return result;
}
ICloudUser user = getUserManager().getICloudUserById(NumberUtils.toInt(uid));
if (null == user) {
// 该逻辑受UAManage前端控制,应该不会被调用,以防意外。 byhansj
result.setMessageCode(MessageCode.USERSERVICE_NORMAL_USERNOTEXIST);
return result;
}
MessageCode validateMessage = validateNickName(newNickname);
if (null != validateMessage) {
result.setMessageCode(validateMessage);
} else {
ICloudUser newUser = getUserManager().getICloudUser(newNickname);
if (null != newUser && NumberUtils.toInt(uid) != newUser.getUserId()) {
result.setMessageCode(MessageCode.USERSERVICE_VALIDATENICKNAME_REGISTERED);
return result;
}
if (newNickname.equals(user.getNickname())) {
result.setMessageCode(MessageCode.USERSERVICE_UPDATE_FAIL);
} else {
boolean succesed = false;
succesed = getUserManager().updateCachedUserById(ICloudUserOperateType.NICKNAME, uid, newNickname);
if (succesed) {
result.setMessageCode(MessageCode.USERSERVICE_UPDATE_SUCCESS);
} else {
result.setMessageCode(MessageCode.USERSERVICE_UPDATE_FAIL);
}
result.setSuccessed(succesed);
}
}
return result;
}
***************************************************************************
/**
* 更新昵称,姓名,单位名
* @param uid
* @param newInfoMap
* @return
*/
private UserServiceResult updateUserNames(String uid, Map<String,String> newInfoMap) {
UserServiceResult result = new UserServiceResult();
if (StringUtils.isEmpty(uid) || newInfoMap == null) {
result.setMessageCode(MessageCode.USERSERVICE_NORMAL_REQUESTINCOMPLETE);
return result;
}
//昵称,姓名,单位名不能为空
String newNickname = newInfoMap.get("newNickname");
String realName = newInfoMap.get("realName");
String company = newInfoMap.get("company");
if(StringUtils.isEmpty(newNickname) || StringUtils.isEmpty(realName) || StringUtils.isEmpty(company)){
result.setMessageCode(MessageCode.USERSERVICE_NORMAL_REQUESTINCOMPLETE);
return result;
}
ICloudUser user = getUserManager().getICloudUserById(NumberUtils.toInt(uid));
if (null == user) {
// 该逻辑受UAManage前端控制,应该不会被调用,以防意外。 byhansj
result.setMessageCode(MessageCode.USERSERVICE_NORMAL_USERNOTEXIST);
return result;
}
MessageCode validateMessage = null;
// 姓名验证
validateMessage = validateRealName(realName);
if (null != validateMessage) {
result.setMessageCode(validateMessage);
return result;
}
// 单位名称验证
validateMessage = validateCompany(company);
if (null != validateMessage) {
result.setMessageCode(validateMessage);
return result;
}
//校验昵称
validateMessage = validateNickName(newNickname);
if (null != validateMessage) {
result.setMessageCode(validateMessage);
} else {
ICloudUser newUser = getUserManager().getICloudUser(newNickname);
if (null != newUser && NumberUtils.toInt(uid) != newUser.getUserId()) {
result.setMessageCode(MessageCode.USERSERVICE_VALIDATENICKNAME_REGISTERED);
return result;
}
//与旧昵称一致
if (newNickname.equals(user.getNickname())) {
result.setMessageCode(MessageCode.USERSERVICE_UPDATE_FAIL);
} else {
boolean succesed = false;
succesed = getUserManager().updateCachedUserInfoById(ICloudUserOperateType.NICKNAME, uid, newInfoMap);
if (succesed) {
result.setMessageCode(MessageCode.USERSERVICE_UPDATE_SUCCESS);
} else {
result.setMessageCode(MessageCode.USERSERVICE_UPDATE_FAIL);
}
result.setSuccessed(succesed);
}
}
return result;
}###6.ICloudUserManager.java //缓存有待解决
java
588-618
/**
* 通过id来更新用户信息(昵称,姓名,单位名称)并且更新缓存
*
* @param type
* @param uid
* @param newInfoMap
* @return
*/
public boolean updateCachedUserInfoById(ICloudUserOperateType type, String uid, Map<String,String> newInfoMap) {
boolean isUpdated = false;
rwl.writeLock().lock();
// 更新数据库
isUpdated = UserDao.updateUserNamesById(uid, newInfoMap);
// 更新缓存
if (isUpdated) {// 虽然sql执行成功,但是不能避免脏读,所以采用直接更新缓存的方式来避免
// 直接更新缓存
LOGGER.info("updateCachedUserById type " + type.toString()
+ " uid " + uid + " newInfoMap " + newInfoMap);
//更新缓存待处理
isUpdated = updateCacheImmediately(type, uid, newInfoMap.get(CASConstants.NICKNAME));
}
rwl.writeLock().unlock();
return isUpdated;
}###7.userDao
java
/**
* 通过id更新用户信息(昵称,姓名,单位名称)
* @param uid
* @param newInfoMap
* @return
*/
public static boolean updateUserNamesById(String uid, Map<String,String> newInfoMap) {
String nickname = newInfoMap.get(CASConstants.NICKNAME);
String realName = newInfoMap.get(CASConstants.REALNAME);
String company = newInfoMap.get(CASConstants.COMPANY);
boolean isReseted = false;
String sql = "update users set " + nickname + "=? "+ realName + "=? "+ company + "=? "+ "where id=?";
Connection conn = DBManager.getInstance().getConnection();
try (PreparedStatement stmt = conn.prepareStatement(sql)) {
stmt.setString(1, nickname);
stmt.setString(2, realName);
stmt.setString(3, company);
stmt.setString(4, uid);
int updated = stmt.executeUpdate();
if (updated != 0) {
isReseted = true;
}
} catch (SQLException e) {
LOGGER.warn("updateUserInfoById " + e.getMessage(),e);
} finally {
if (null != conn) {
DBManager.getInstance().returnConnection(conn);
}
}
return isReseted;
}###8.casManagerResource.java
29-31
// userInfo
USERINFO_MODIFY_ERROR, // 用户修改失败
USERINFO_MODIFY_SUCCESS,//用户修改成功###9.casManagerResource.properties
18-20
casManagerResource.properties
casManagerResource_zh.properties
casManagerResource_en.properties
#userInfo
USERINFO_MODIFY_ERROR=信息修改失败
USERINFO_MODIFY_SUCCESS=信息修改成功
#userInfo
USERINFO_MODIFY_ERROR=Failed to change your userInfo
USERINFO_MODIFY_SUCCESS=Change userInfo succeedRequest URL: https://sso.supermap.com/v101/cas/phoneregister?service=https://itest.supermapol.com
Request Method: POST
Status Code: 500 Internal Server Error
Remote Address: 182.92.192.70:443
Referrer Policy: no-referrer-when-downgrade##三、前端
1.nicknameSuccess.jsp
32,修改成功后,
昵称修改成功 = 》 信息修改成功
23
<label class="logo_title vm"><spring:message code="nickname_modify_title"/></label>##四、校验
1.去掉新旧验证(pass)
java
AccountManager.java
checkNicknameParameter方法 300行
/**
*
* @param params
* @param user
* @return
*/
private AccountManagerResult checkNicknameParameter(AccountManagerParameter params, ICloudUser user){
AccountManagerResult result = new AccountManagerResult();
if (StringUtils.isBlank(params.getNewNickname())) {
result.status = ResultStatus.EXCEPTION;
result.message = getMessageSource().getMessage(
CasManagerResource.NEW_NICKNAME_NOT_NULL);
}else if (params.getNewNickname().equals(user.getNickname())) {
result.status = ResultStatus.FAILED;
result.message = getMessageSource().getMessage(
CasManagerResource.NICKNAME_NOT_BE_SAME);//新旧昵称一样
}
return result;
}
*********************************************************************
/**
*
* @param params
* @param user
* @return
*/
private AccountManagerResult checkNicknameParameter(AccountManagerParameter params, ICloudUser user){
AccountManagerResult result = new AccountManagerResult();
if (StringUtils.isBlank(params.getNewNickname())) {
result.status = ResultStatus.EXCEPTION;
result.message = getMessageSource().getMessage(
CasManagerResource.NEW_NICKNAME_NOT_NULL);
}
// else if (params.getNewNickname().equals(user.getNickname())) {
// result.status = ResultStatus.FAILED;
// result.message = getMessageSource().getMessage(
// CasManagerResource.NICKNAME_NOT_BE_SAME);//新旧昵称一样
// }
return result;
}###1.1新旧验证成功(ok)
AccountManager.java
/**
*
* @param params
* @param user
* @return
*/
private AccountManagerResult checkNicknameParameter(AccountManagerParameter params, ICloudUser user){
AccountManagerResult result = new AccountManagerResult();
if (StringUtils.isBlank(params.getNewNickname())) {
result.status = ResultStatus.EXCEPTION;
result.message = getMessageSource().getMessage(
CasManagerResource.NEW_NICKNAME_NOT_NULL);
}
else if (params.getNewNickname().equals(user.getNickname())) {
result.status = ResultStatus.SUCCESS;
result.message = getMessageSource().getMessage(
CasManagerResource.NICKNAME_ASYNVALIDATE_SUCCESS);
}
return result;
}
1. nicknameModify方法和validateUserNickname方法条件改
if(ResultStatus.SUCCESS.equals(result.status)) {
addDatasToModelAndView(mv, ViewConstants.NICKNAMESUCCESS, result.message);
user.setNickname(params.getNewNickname());
}###2.校验焦点事件还是form提交事件
java
AccountManagerService.java
postResponseUserInfo 450
//判断是昵称焦点移开事件,还是form提交事件
if(StringUtils.isEmpty(params.getRealName()) && StringUtils.isEmpty(params.getCompany())){
paramsMap.put(AccountManagerConstants.TYPE, type.name());
paramsMap.put(AccountManagerConstants.NEWUSERINFO, params.getNewNickname());
}else {
paramsMap.put(AccountManagerConstants.TYPE, type.name());
// paramsMap.put(AccountManagerConstants.NEWUSERINFO, params.getNewNickname());
paramsMap.put(AccountManagerConstants.NEWUSERINFO, JSON.toJSONString(params));
}