开发忘记密码功能遇到的问题


后端验证功能用的是shiro框架,当前端发送AJax请求到后端,如果在application.yml文件中没有将找回页面所需要调用的接口配置为匿名,那么这些接口不会不调用,在浏览器的开发者模式下,也可以看到该接口会报302错误。

所以我们需要在项目的yml文件中配置该接口的匿名配置

自此,在未登录的状态下,通过调用后端接口修改密码的功能完成。
接下来是前端js遇到的问题
首先是要写html代码,设置忘记密码页面的样式。我这采用的是弹窗方式。
在login.jsp文件中添加忘记密码的样式,点击的话会调用findPwd()方法

findPwd: function () {require(["artDialog","Tips"],function () {var dialogObj = dialog({url: App.contextPath + "/findPwd.htm",title: '找回密码',quickClose: false,width: 400,height: 350,okValue:'确定',cancelValue:'取消',ok: function () {$(window.parent.document).contents().find("#" + dialogObj.id)[0].contentWindow.pageObj.save();return false;},cancel:function () {return true;}});pageObj.dialogObj = dialogObj;dialogObj.showModal();});},

这段代码是findPwd()方法的jsp代码,里面new了一个dialog,设置了dialog的样式。

 url: App.contextPath + "/findPwd.htm",

这个url配置的是findPwd()方法调用的js脚本文件的路径。

             okValue:'确定',cancelValue:'取消',ok: function () {$(window.parent.document).contents().find("#" + dialogObj.id)[0].contentWindow.pageObj.save();

function里设置的ok按钮调用的javascript方法。
findPwd.js文件代码如下:

var pageObj = pageObj || {};
require(["jQuery", "AppUtils", "Tips"], function () {$.extend(pageObj, {phoneCodeBtn: $('#phoneCodeBtn'),wait: 60,msgId: '',validateRule: function () {return {phone: {label: '手机号码', required: true, reqExp: /^(1[0-9]\d{9})$/, reqExpMsg: "格式不正确"},phoneCode: {label: '短信验证码', required: true},password: {label: '登录密码', required: true, reqExp: /^.{6,18}$/, reqExpMsg: "长度在6位到18位之间"},confirmPwd: {label: '确认密码', required: true, reqExp: /^.{6,18}$/, reqExpMsg: "长度在6位到18位之间"},};},init: function () {// require(["AutoCombobox"], function () {//     pageObj.getTeacherCombo();// });require(["jqForm"], function () {pageObj.getForm();});},getForm: function () {return $("#findPwdForm").jqForm({});},initEvent: function () {pageObj.phoneCodeBtn.click(function () {ajaxUtil.ajaxWithBlock({type: 'get',url: App["contextPath"] + "/getFindPwdAuthCode.json",data: {captcha: $('#validateCode').val(), phone: $('#phone').val()},dataType: 'json',contentType: 'application/json;charset=utf-8' //设置请求头信息}, function (data) {TipsUtil.show(data.success, data.message);if (data.success) {pageObj.msgId = data.info;pageObj.authCodeTime();}});});},authCodeTime: function () {if (pageObj.wait === 0) {pageObj.phoneCodeBtn.attr('disabled', false);pageObj.phoneCodeBtn.html('获取验证码');pageObj.wait = 60;} else {pageObj.phoneCodeBtn.attr('disabled', true);pageObj.phoneCodeBtn.html('重新发送(' + pageObj.wait + ')');pageObj.wait--;setTimeout(function () {pageObj.authCodeTime();}, 1000);}},save: function () {var $form = pageObj.getForm(false),formData = $form.jqForm("getValue");formData.msgId = this.msgId;//验证var validateMsgObj = validateUtil.validateDatas(formData, pageObj.validateRule());if (!$.isEmptyObject(validateMsgObj)) {//提示 拼接的验证信息TipsUtil.error(validateUtil.concatValidateMsg(validateMsgObj, -1));//焦点定位到 第一个 验证不通过的控件$form.jqForm("focusToElement", validateUtil.getFirstNoPassName(validateMsgObj));return;}if ($('#password').val() !== $('#confirmPwd').val()) {TipsUtil.warn("两次输入密码不一致,请重新输入!");return;}//修改$.ajax({async: false,type: "POST",url: App.contextPath + "/getEncryptKey.json",success: function (response) {if (response && response.success) {require(["Tips", "RSA", "jQueryBlockUI"], function () {try {var key = RSA.getRSAKeyPair(130, response.info.rsaExponent, "", response.info.rsaModule);formData.password = RSA.encryptedString(key, formData.password);formData.confirmPwd=RSA.encryptedString(key, formData.confirmPwd);} catch (e) {TipsUtil.error("错误:加密失败!");}ajaxUtil.ajaxWithBlock({url: App.contextPath + "/forgetPassword.json",type: "post",data: JSON.stringify( {vo: formData}),contentType: 'application/json;charset=utf-8' //设置请求头信息}, function (data) {if (data.success) {parent.pageObj.closeDialog(data.message);} else {TipsUtil.error(data.message);}});});}}});},refreshValidateCode: function () {$('#validateCodeImg').attr('src', App.contextPath + '/validateCodeServlet?name=reg&ver=' + new Date().getTime());}});$(window).ready(function () {pageObj.init();pageObj.initEvent();});
});

其中弹窗初始化,调用的后端接口的url,还有一系列交互操作,密码加密,密码两次相同校验都有设置。


第二种方式就是在java的shiroConfiguration配置类中配置

使用shiro框架的项目增加忘记密码功能遇到的一些问题相关推荐

  1. c/c++编程日记:纯C实现登录注册和忘记密码功能(附源码)

    这是一个用纯C语言和文件操作实现的系统的登录.注册和忘记密码功能.可以用于c语言大作业的登录系统.下面分享一下具体的代码. 首先定义一个结构体来存放用户的注册信息,账号密码等. typedefstru ...

  2. 连接真机开发安卓(Android)移动app MUI框架 反馈意见、忘记密码、登录、底部选项卡、联系我们、导航等页面代码可拿——混合式开发(六)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 开头先分享个有趣的 ...

  3. Shiro框架在项目中的应用

    1.Shiro 框架简介 Shiro 概述 Shiro 是Apache公司推出一个权限管理框架,其内部封装了项目中认证,授权,加密,会话等逻辑操作,通过Shiro框架可以简化我们项目权限控制逻辑的代码 ...

  4. 重置功能怎么实现java_java实现忘记密码功能

    最近项目中需要用到忘记密码的功能,因此,写了这篇博客进行记录. 首先需要用户点击忘记密码,输入用户名和邮箱,两者可以匹配,则向邮箱中发送条链接.eg: 点击此链接进行密码修改,有效期一个小时www.a ...

  5. android实现忘记密码功能,手机忘记密码如可解决 安卓手机重置密码教程【详解】...

    许多安卓手机用户都会为自己的手机设置一个密码,方便保护自己的手机隐私,但是密码变化多次之后,自己有时候也会忘记密码,尤其是图形密码,更是容易记混了.那么,安卓手机忘记密码该怎么办呢?一起来看看今天小编 ...

  6. Android忘记密码功能实现

    连续好几天学习都没有什么进展,然而在今天这个烂漫的日子.突然有了学习的动力.想起来前几日老师给布置的android忘记密码的功能实现.今天也有了想法.就是按照老师的建议,简单的回答一个问题,实现此功能 ...

  7. ThinkPHP5聚合数据短信验证码接口实现注册/忘记密码功能

    1.前端页面主要代码 这里点击发送验证码按钮通过ajax将相关信息传到后端getSms方法中. <form class="form-horizontal form-signin&quo ...

  8. c/s项目记住账号密码功能

    1.login.cs中的一开始加载页面//从注册表中读取 是否保存了用户名密码 自动启动配置string RegeditKey = "PMSApp";RegistryKey loc ...

  9. android实现忘记密码功能,Android忘记密码功能

    您可以使用此tar文件 的activation.jar additionnal.jar 的mail.jar 使用这种方法 public void send() throws Exception { S ...

最新文章

  1. 单元格内多个姓名拆分成一列_excel单元格拆分拆分同一单元格中的姓名,原来这么简单啊!...
  2. NOIP信息奥赛--1995“同创杯”初中复赛题题解(五)
  3. DataGridView 添加ComboBox
  4. java 静态类 静态方法_JAVA的静态变量、静态方法、静态类
  5. JDK8的日期时间类2
  6. mac hosts文件已锁定无法修改怎么办?hosts修改权限设置教程
  7. (王道408考研操作系统)第二章进程管理-第二节4:调度算法详解2(RR、HPF和MFQ)
  8. 织梦index.php不更新,亲测dede织梦后台无法更新生成,更新没反应的解决方法
  9. mycat mysql 主从_Mycat实现Mysql主从读写分离
  10. matlab中一个显示根号的技巧
  11. S4 HANA 1809 FPS03 Standard装机总结(刘欣2019.11.7)
  12. 浏览器端技术体系概览 -- 前端开发的七种武器
  13. 公众平台--扫描微信二维码,关注后自动登录
  14. 小品演员小沈阳爆笑语录
  15. android edittext底线,android – 更改edittext的底线颜色
  16. mysql火焰图_perf + 火焰图分析程序性能 - 刘志鹏的Blog - 博客园
  17. MFC CString 长度取得
  18. STM8S 模拟I2C程序
  19. 电商 竞品分析_电商平台竞品分析报告.docx
  20. 卸甲归田——回顾CSP2019

热门文章

  1. 【leetcode】940. Distinct Subsequences II
  2. android消息机制—Looper
  3. 来自运维伪大佬的叨叨
  4. Opengl 好的文章和博客地址
  5. 【javascript】js检验注册密码强度效果
  6. 疯狂ios之cocos2d中的文本
  7. 快速搭建本地服务器 php,本地PHP服务器环境快速搭建
  8. linux记录iptables日志,linux – 如何配置syslog.conf文件,在单独的文件中记录iptables消息?...
  9. java注解获取参数_JAVA 自定义注解及参数获取 | 学步园
  10. cin、cin.get()、cin.getline()、getline()、gets()等函数的用法 (转)