Struct2或者SSH项目中添加手机短信登录及期间遇到的一些问题
来源:互联网 发布:薛之谦的女装淘宝店 编辑:程序博客网 时间:2024/05/23 13:49
关于程序中如何发送短信,可以参考我的上一篇博客,这里就不多陈述了。
一.首先我们从页面看起,主要页面元素如下
<form id="phoneFrom" > <label for="user-name" class="am-u-sm-3 am-form-label" >手 机 </label> <input type="text" class="am-form-field" name="phone" id="phoneNum" value="" placeholder="预留手机号..."> <button class="am-btn am-btn-default" type="button" onclick="subform(this)">获取验证码</button> </form><div class="am-input-group am-input-group-sm"><label for="user-name" class="am-u-sm-3 am-form-label">验证码</label> <input type="text" class="am-form-field" name="username" id="codeNum" placeholder="输入验证码" ></div><div class="am-modal-footer"><span class="am-modal-btn" id="submitSpan" >登录</span></div>
JS处理:
<script type="text/javascript">function subform(obj){ $.ajax({ cache: false,//cache为true则从缓存中取数据,如果数据会变动,则需将此设为false type: "POST", url:"${pageContext.request.contextPath}/phoneLogin.action", data:$('#phoneFrom').serialize(),// 你的formid async: false, dataType:"json",//设置需要返回的数据类型 error: function(XMLHttpRequest, textStatus, errorThrown) { alert(XMLHttpRequest.status); alert(XMLHttpRequest.readyState); alert(textStatus); }, success: function(data) { if("true" == data.result){ var submitSpan = document.getElementById("submitSpan"); //js中动态为标签元素添加点击事件,有如下四种方式,我这里使用了第二种 /*submitSpan.onclick = function () { phoneLogin(); } */ submitSpan.onclick = phoneLogin;//后面不能加(),不然就直接执行该方法了 //submitSpan.attachEvent("onclick",phoneLogin);//Mozilla系列,并不支持该方法,需要用到addEventListener //submitSpan.addEventListener("onclick", phoneLogin, true); } else { alert("该用户不存在,或未绑定手机"); } } }); } function phoneLogin(){var phone = document.getElementById("phoneNum").value;var code = document.getElementById("codeNum").value;var formdata = { "codeLoginPhone" : phone, "codeLoginCode" : code }; $.ajax({ type: "POST", url: "${pageContext.request.contextPath}/phoneCodeLogin.action", contentType: "application/json; charset=utf-8", data: JSON.stringify(formdata), dataType: "json", success: function (message) { if ("true" == message.result) { //登录验证成功,跳转到主页 var url = "${pageContext.request.contextPath}/mainPage.jsp"; window.location.href=url; } else { alert("保存失败"); } }, error: function (message) { $("#request-process-patent").html("提交数据失败!"); } }); }</script>
二.action中如何处理
第一步,输入手机号,提交,后台验证用户是否存在,若存在,则发送短信验证码,参数使用ModelDriven方式获取,返回json格式数据,json由map转化而成
/** * 使用手机号码登录 * @return * @throws Exception */public String phoneLogin() { try { Map<String,Object> map = new HashMap<String,Object>(); String loginPhone = adminKissfly.getPhone(); adminKissfly = adminKissflyService.findAdminByPhone(loginPhone);//判断登录是否成功if(adminKissfly==null){//当前手机号用户不存在,失败map.put("result","false");return INPUT;}else{ //验证码,我这里使用的是四位随机数 String code = RandomUtils.makeRandomNum(); //发送手机短信 Map<String,String> phoneMap = new HashMap<String,String>(); phoneMap.put("phone", loginPhone.trim()); phoneMap.put("text", "验证码:" + code); String backMes = MessageUtils.SendMessage(phoneMap); System.out.println("短信发送情况返回码为:" + backMes); if("1".equals(backMes)){ this.setRequest(ServletActionContext.getRequest()); HttpSession session = request.getSession(); session.setMaxInactiveInterval(60*1);//设置session有效期60秒 session.setAttribute(loginPhone, code);//将验证码放入session中,60秒内有效,用于和用户输入的验证码进行比对 //将数据放在Map中,然后再将Map转化成Json map.put("result","true"); this.setResult(map); return "phoneLoginSuccess"; }else{ return INPUT; } } } catch (Exception e) { e.printStackTrace(); } return INPUT;}
第二步:用户输入验证码并提交,服务器将用户输入的验证码和session中的验证码进行对比,若一致,则登录成功
/** * 检验验证码是否正确 * @return */public String phoneCodeLogin() {try {this.setRequest(ServletActionContext.getRequest());request.setCharacterEncoding("UTF-8"); ServletInputStream input = request.getInputStream();int len = request.getContentLength();if (len <= 0) { return "";}byte[] buffer = new byte[len];input.read(buffer);String message = new String(buffer,"UTF-8");JSONObject allMessage = new JSONObject(message);String phone = allMessage.getString("codeLoginPhone");HttpSession session = request.getSession();String sendCode= (String) session.getAttribute(phone);String code = allMessage.getString("codeLoginCode");if(null!=sendCode&&code.equals(sendCode)){System.out.println("验证码一致,登录通过");adminKissfly = adminKissflyService.findAdminByPhone(phone);//判断登录是否成功if(adminKissfly==null){//失败return INPUT;}else{ //将登录信息保存在session中 ServletActionContext.getRequest().getSession().setAttribute("adminKissfly", adminKissfly);Map<String,Object> map = new HashMap<String,Object>();map.put("result","true");this.setResult(map);return "phoneCodeLoginSuccess";}}} catch (Exception e) {System.out.println(e.getMessage() + e);e.printStackTrace();}return INPUT;}
三.配置文件的编辑
Struct.xml的配置
<action name="phoneLogin" class="loginFlyAction" method="phoneLogin"> <result name="phoneLoginSuccess" type="json"> <param name="root">result</param> </result></action><action name="phoneCodeLogin" class="loginFlyAction" method="phoneCodeLogin"> <result name="input">/loginFly.jsp</result> <result name="phoneCodeLoginSuccess" type="json"> <param name="root">result</param> </result></action>
0 0
- Struct2或者SSH项目中添加手机短信登录及期间遇到的一些问题
- Struct2或者SSH项目中,在JSP页面显示Action中注册的错误信息
- Struct2或者SSH项目中,在JSP页面显示Action中注册的错误信息
- 关于TSP项目中遇到的一些问题,及解决方法
- 项目开发中遇到的一些问题--登录时跳转原页面
- 项目中遇到的一些小问题
- 项目中遇到的一些小问题
- 项目中遇到的一些小问题
- 项目过程中遇到的一些问题
- 一些项目中遇到的小问题
- 项目中遇到的一些问题
- java SSH + extj 项目过程中遇到的问题及注意点(一)
- java SSH + extj 项目过程中遇到的问题及注意点(二)
- 在练习ssh项目时遇到的问题及解决方法
- ssh开发过程中遇到的问题,以及一些解决办法
- 关于Eclipse/MyEclipse中开发JavaEE项目或者Android项目常见错误及解决方案集锦(个人遇到的问题)
- [一般问题] android导入项目中遇到的一些问题及解决方法
- 项目中遇到的问题及技术
- zoj 3469 Food Delivery (区间DP)
- Android studio 遇到的第一个问题
- Struts2学习一、分析初始化流程
- 设计模式之:访问者模式(Visitor)
- 三星、微软高调推新品,平板行业“风水轮流转”?
- Struct2或者SSH项目中添加手机短信登录及期间遇到的一些问题
- ALSA声卡驱动中的DAPM详解之五:建立widget之间的连接关系
- 属性动画的简单使用和总结
- spring hadoop 访问hbase入门
- zookeeper原理
- python读写文件处理空格,空行与结束
- 控制输入法软键盘隐藏
- 初步认识SVG
- PHP之常量