需求:
当用户登录系统后,个人中心增加修改密码按钮
密码强度校对要求:
1、修改密码提交用Base64加密,Java解密
2、设计密码复杂度:最少8位,数字+大写字母+小写字母+特殊字符 最少3种
3、登录时用户名密码加密传输
4、修改密码时用户密码加密传输
参考正则表达式: ^(?=.*[a-zA-Z])(?=.*[0-9])(?=.*[._~!@#$^&*])[A-Za-z0-9._~!@#$^&*]{8,20}$
首先,前端增加修改密码框 代码如下:
<!--修改密码框-->
<div id="passwordLayer" style="display: none;">
<form class="layui-form" >
<div class="layui-form">
<div class="layui-form-item" style="margin-top: 10px">
<label class="layui-form-label" style="font-weight: bold">账号</label>
<span class="layui-form-label" style="width:100px;">
<span class="userName" style="vertical-align: text-top;" ></span>
</span>
</div>
<div class="layui-form-item">
<label class="layui-form-label" style="font-weight: bold">原密码</label>
<div class="layui-input-block">
<input type="password" class="layui-input" id="password" placeholder="请输入原密码" style="width: 380px;"/>
</div>
</div>
<div class="layui-form-item">
<div class="layui-form-label" style="font-weight: bold">新密码</div>
<div class="layui-input-block">
<input type="password" class="layui-input" id="newPassword" placeholder="请输入新密码" style="width: 380px;"/>
</div>
</div>
</div>
</form>
</div>
其中绑定id 增加点击按钮事件
js 代码:
Base64加密 源代码
后端接口调用:
/**
* 修改登录用户密码
*/
@ResponseBody
@SysLog("修改密码")
@RequestMapping("/password")
public R password(String password, String newPassword) throws UnsupportedEncodingException {
//判断是否为管理员
if (getUserId().equals("1")) {
throw new RRException("系统管理员不可修改密码");
}
//数据校验是否为空
Assert.isBlank(newPassword, "新密码不为能空");
//由于前端base64加密传输 这里进行base64解密
password = new String(Base64.decode(password), "utf-8");
newPassword = new String(Base64.decode(newPassword), "utf-8");
//解密后的密码进行sha256加密
password = new Sha256Hash(password).toHex();
//解密后的密码sha256加密
newPassword = new Sha256Hash(newPassword).toHex();
System.out.println(password);
System.out.println(newPassword);
//更新密码
int count = sysUserService.updatePassword(getUserId(), password, newPassword);
if (count == 0) {
return R.error("原密码不正确");
}
//退出
ShiroUtils.logout();
return R.ok();
}