5.3的版本中新增用户是默认有密码时限的设置,但登录后没有提供密码时限的校验提示用户修改密码
如果需要在登录后进行密码时限校验提示用户修改密码,参考如下实现:
1.在/BIZ/SA/OPM/system/system.process.m中loginAction执行后事件,获取action返回接口中的密码时限(天)和密码修改时间
再获取当前时间与密码修改时间之间相差的天数,如果大于密码时限的天数可以用session中设置一个值
public static void systemProcessAfterLoginAction() { List users = (List) ContextHelper.getActionContext().getActionResult();//获取action的返回结果 Integer sPasswordTimeLimit = (Integer) users.get(8);//获取密码时限(天) if(Utils.isNotNull(sPasswordTimeLimit) && sPasswordTimeLimit != -1){//判断密码时限不为空切不等于-1 Date sPasswordModifyTime = (Date) users.get(9);//获取密码修改时间 Date newDate = new Date(); long nd = 1000 * 24 * 60 * 60; long diff = newDate.getTime() - sPasswordModifyTime.getTime();// 获得当前时间和密码修改时间两个时间的毫秒时间差异 long day = diff / nd;// 计算差多少天 if(day>sPasswordTimeLimit){//相差天数大于密码时限天数给session赋值 HttpSession session = ContextHelper.getSessionContext().getSession(); session.setAttribute("needModifyPassword", true); } } }
需要注意在BIZ层的构建路径中把apache-tomcat\lib\servlet-api.jar导入,在java中引用
import javax.servlet.http.HttpSession;
2.把存储到session中的信息放到Context中,便于前端登录后获取判断
参考如何将自己需要的信息写到Context上下文中
如下:
public static Object getSysParams() { Map hashMap = (HashMap<String, String>) ContextHelper.getSysParams(); //平台默认的context中的信息 HttpSession session = ContextHelper.getSessionContext().getSession(); hashMap.put("needModifyPassword", session.getAttribute("needModifyPassword"));//把自己要的信息put到map中 return hashMap; }
3.通过扩展空间修改/UI2/portal/base/base.js
(1).添加引用
var WindowDialog = require("$UI/system/components/justep/windowDialog/windowDialog");
(2).在Model.prototype.loginDialogReceive = function(event) {函数中获取context中的信息判断打开修改密码的弹出框
Model.prototype.loginDialogReceive = function(event) { this.beforeLogin(); this.setPortalContext(event.data); this.afterLogin(); var needModifyPassword = this.getContext().getSystemParameter("needModifyPassword"); if(needModifyPassword){ if (confirm("您的密码已经过期,请按确定健进入密码修改窗。")) var changePasswordDialog = new WindowDialog({ src : "$UI/portal/base/login/changePassword.w", parentNode : root, process : "/portal/process/message/messageProcess", activity : "mainActivity", title : '修改密码', showTitle : false, status : 'normal', }); changePasswordDialog.open(); } };
$UI/portal/base/login/changePassword.w的定义是直接复制的/UI2/portal/base/changePassword下的changePassword.w和对应的js文件
对/UI2/portal_X/base/login/changePassword.js文件中的修改
(1).添加引用
var MsgDialog = require("$UI/system/components/justep/messageDialog/messageDialog");
(2).代码修改
var result = this.changePassword(newValue, oldValue); if(result.flag === false) justep.Util.hint(result.message, {type: 'danger', parent: this.getRootNode()}); else justep.Util.hint("密码修改成功!", {type: 'success', parent: this.getRootNode()});
修改为:
var result = this.changePassword(newValue, oldValue); if (result.flag === false) justep.Util.hint(result.message, { type : 'danger', parent : this.getRootNode() }); else { var me = this; this.msg = new MsgDialog({ parentNode : me.getRootNode(), type : 'OK', message : "密码修改成功,后续请使用新密码登录!", title:'修改密码提示' }); this.msg.on('onOK', function(event) { me.close(); }, me); this.msg.show(); }
评一波