目錄
1,導入微信前端頁面
2,編寫wx/UserController
3,補充工具類
4,修改前端頁面index.html 、login.html,實作短信驗證登入、登出功能
完整項目在這裡實時更新<( ̄︶ ̄)↗[GO!]:
https://github.com/GoodbyeFirefly/ExpressManagementSystemhttps://github.com/GoodbyeFirefly/ExpressManagementSystem
https://github.com/GoodbyeFirefly/ExpressManagementSystem![]()
07-項目訓練_短信登陸和登出
1,導入微信前端頁面
将缺失的部分導入對應的檔案夾中
2,編寫wx/UserController
package com.xxy.wx;
import com.xxy.bean.Message;
import com.xxy.bean.User;
import com.xxy.mvc.ResponseBody;
import com.xxy.service.CourierService;
import com.xxy.service.UserService;
import com.xxy.util.JSONUtil;
import com.xxy.util.RandomUtil;
import com.xxy.util.SMSUtil;
import com.xxy.util.UserUtil;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class UserController {
@ResponseBody("/wx/loginSms.do")
public String sendSms(HttpServletRequest request, HttpServletResponse response) {
String userPhone = request.getParameter("userPhone");
String code = String.valueOf(RandomUtil.getCode());
boolean flag = SMSUtil.send(userPhone, code);// 向控制台發送驗證碼
Message msg = new Message();
if (flag) {
msg.setStatus(0);
msg.setResult("驗證碼已發送,請查收");
} else {
msg.setStatus(-1);
msg.setResult("驗證碼下發失敗,請檢查手機号或稍後再試");
}
UserUtil.setLoginSms(request.getSession(), userPhone, code);// 将手機号對應的驗證碼資訊存入session中
return JSONUtil.toJSON(msg);
}
@ResponseBody("/wx/login.do")
public String login(HttpServletRequest request, HttpServletResponse response) {
String userPhone = request.getParameter("userPhone");
String userCode = request.getParameter("code");
String sysCode = UserUtil.getLoginSms(request.getSession(), userPhone);// 擷取存儲在session中的資訊
Message msg = new Message();
if (sysCode == null) {
// 該手機号未擷取短信
msg.setStatus(-1);
msg.setResult("該手機号碼未擷取短信");
} else if (sysCode.equals(userCode)) {
User user = new User();
user.setUserphone(userPhone);
// 手機号和驗證碼一緻,登入成功
if (CourierService.findByPhone(userPhone) != null) {
// 快遞員登入(包含普通使用者的權限)
msg.setStatus(1);
user.setUser(false);// 這是新添加的屬性,用于判斷該手機号是使用者還是快遞員
} else {
// 普通使用者登入
msg.setStatus(0);
user.setUser(true);
}
UserUtil.setWxUser(request.getSession(), user);// 将手機号和驗證碼的對應資訊存入session
} else {
// 驗證碼不一緻,登入失敗
msg.setStatus(-2);
msg.setResult("驗證碼不一緻");
}
return JSONUtil.toJSON(msg);
}
@ResponseBody("/wx/logout.do")
public String logout(HttpServletRequest request, HttpServletResponse response) {
request.getSession().invalidate();
Message msg = new Message(0);
return JSONUtil.toJSON(msg);
}
@ResponseBody("/wx/uerInfo.do")
public String userInfo(HttpServletRequest request, HttpServletResponse response) {
User user = UserUtil.getWxUser(request.getSession());
Boolean isUser = user.getUser();
Message msg = new Message();
if (isUser)
msg.setStatus(0);
else
msg.setStatus(1);
msg.setResult(user.getUserphone());
return JSONUtil.toJSON(msg);
}
}
在application.properties中添加該類的資訊
3,補充工具類
補充UserUtil工具類:将手機及短信資訊存入session、從session中取出短信資訊、将使用者身份存入session、從session中取出使用者身份資訊
package com.xxy.util;
import com.xxy.bean.User;
import javax.servlet.http.HttpSession;
public class UserUtil {
public static String getUsername(HttpSession session) {
return (String) session.getAttribute("adminUsername");
}
public static String getUserphone(HttpSession session) {
// 還未存儲錄入人的資訊,這裡先暫時代替一下
return "18888888888";
}
public static String getLoginSms(HttpSession session, String userPhone) {
return (String) session.getAttribute(userPhone);
}
public static void setLoginSms(HttpSession session, String userPhone, String code) {
session.setAttribute(userPhone, code);
}
public static User getWxUser (HttpSession session) {
return (User) session.getAttribute("wxUser");
}
public static void setWxUser(HttpSession session, User user) {
session.setAttribute("wxUser", user);
}
}
4,修改前端頁面index.html 、login.html,實作短信驗證登入、登出功能
index.html
<!DOCTYPE html>
<html>
<head>
<title>快件e棧服務平台</title>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
<link href="css/normalize.css" type="text/css" rel="stylesheet" />
<link href="css/main.css" type="text/css" rel="stylesheet" />
<script src="js/jquery.min.js" type="text/javascript"></script>
<script src="layer/layer.js" type="text/javascript"></script>
<script src="js/notice.js" type="text/javascript"></script>
<script src="js/common.js" type="text/javascript"></script>
</head>
<body>
<div class="content">
<div class="top autoH">
<div class="logo autoH">
<img src="images/logo.png" width="100%">
</div>
</div>
<div class="middle">
<form id="theForm">
<div class="forminput">
<input type="text" id="expressNum" name="expressNum" placeholder="請輸入快遞單号...">
<input id="PageContext" type="hidden" value="${pageContext.request.contextPath}" />
<div class="submBtn"></div>
</div>
</form>
</div>
<div class="funContdiv">
<div class="funCont">
<div class="userFun">
<p class="funIcon userFunColor1"></p>
<p class="funTxt">個人中心</p>
</div>
<div class="userFun">
<p class="funIcon userFunColor2"></p>
<p class="funTxt">懶人排行</p>
</div>
<div class="userFun">
<p class="funIcon userFunColor3"></p>
<p class="funTxt">取貨二維碼</p>
</div>
<div class="userFun">
<p class="funIcon userFunColor4"></p>
<p class="funTxt">我的快件</p>
</div>
<div class="userFun" id="userFun5">
<p class="funIcon userFunColor5"></p>
<p class="funTxt">快遞助手</p>
</div>
<div class="userFun">
<p class="funIcon userFunColor6"></p>
<p class="funTxt">登出</p>
</div>
</div>
</div>
<div class="footer">
<p class="copytxt">©新職課版權所有</p>
</div>
</div>
<script type="text/javascript">
var isUser;
var userPhone;
$(function () {
$.getJSON("/wx/uerInfo.do", null, function (data) {
userPhone = data.result;
if (data.status == 0){
isUser = true;
$("#userFun5").hide();
}
else
isUser = false;
// layer.message("歡迎您:" + userPhone);
});
});
$(function(){
var pageContextVal = $("#PageContext").val();
$(".userFun").click(function(){
var clickNum = $(this).index();
switch(clickNum){
//個人中心
case(0):
window.location.href= "wxUserhome.html";
break;
case(1):
window.location.href= "lazyboard.html";
break;
case(2): window.location.href= "personQRcode.html"; break;
case(3): window.location.href= "expressList.html"; break;
case(4): window.location.href= "expressAssist.html"; break;
case(5):
$.getJSON("/wx/logout.do", null, function (data) {
window.location.href= "login.html";
});
break;
}
});
var initFunc = function(){
var windowH = $(document).height();
var windowW = $(document).width();
$(".content").css({"height": windowH+"px"});
var contentW = $(".content").width();
var contentH = $(".content").height();
var contH = windowH / 3;
$(".autoH").css({"height": contH+"px"});
// userFunH content
var middleH = $(".middle").height() + 40;
var userFunH = contentH - contH - middleH - 30 -20; //footer,userfun(margin)
$(".funContdiv").css({"height":userFunH+"px"});
var funIconH = $(".funIcon").width();
$(".funIcon").css({"height": funIconH+"px","line-height": funIconH+"px","border-radius": funIconH/2 +"px","font-size":funIconH/2 +"px"});
};
initFunc();
$(window).resize(function(){
initFunc();
});
// input focus
$(".middle .forminput input").focus(function(){
$(".middle .forminput").css({"border":"1px solid rgba(31,114,255,.75)","box-shadow":"0 0 8px rgba(31,114,255,.5)"});
});
// input blur
$(".middle .forminput input").blur(function(){
$(".middle .forminput").css({"border":"1px solid #333333","box-shadow":"none"});
});
//submit arrow
$(".submBtn").click(function(){
var expressNum = $("#expressNum").val();//快遞單号
$.ajax({
type:'GET',
url:pageContextVal+'/ul/indexQueryExpress',
data:{'expressNum':expressNum},
dataType: "json",
success:function(data){
var jsontmp = data;
switch(jsontmp.code) {
case "1" : rzAlert("操作提示",jsontmp.message); break;
case "0" :
rzAlert("操作提示",jsontmp.message);
break;
}
},
error:function(){
}
});
});
});
</script>
</body>
</html>
login.html
<!DOCTYPE html>
<html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>快件e棧使用者登陸</title>
<meta content="width=device-width,initial-scale=1.0,maximum-scale=1.0,user-scalable=0" name="viewport">
<meta content="yes" name="apple-mobile-web-app-capable">
<meta content="black" name="apple-mobile-web-app-status-bar-style">
<meta content="telephone=no" name="format-detection">
<link href="css/style.css" rel="stylesheet" type="text/css">
</head>
<body style="">
<section class="aui-flexView">
<header class="aui-navBar aui-navBar-fixed">
<a href="javascript:;" class="aui-navBar-item">
</a>
<div class="aui-center">
<span class="aui-center-title"></span>
</div>
</header>
<section class="aui-scrollView">
<div class="aui-ver-head">
<img src="images/head.png" alt="">
</div>
<div class="aui-ver-form"><img class="logo" src="images/logo.png">
<div class="aui-flex">
<div class="aui-flex-box">
<i class="icon icon-phone"></i>
<input id="phone1" type="text" autocomplete="off" placeholder="手機号碼">
</div>
</div>
<div class="aui-flex">
<div class="aui-flex-box">
<i class="icon icon-code"></i>
<input id="code1" type="text" autocomplete="off" placeholder="驗證碼">
</div>
<div class="aui-button-code">
<input id="btnSendCode1" type="button" class="btn btn-default" value="擷取驗證碼" onclick="sendMessage1()">
</div>
</div>
<div class="aui-ver-button">
<button onclick="binding()">立即登入 / 注冊</button>
</div>
<div class="aui-cell-box">
<label class="cell-right">
<input type="checkbox" value="1" name="checkbox" checked="checked">
<i class="cell-checkbox-icon"></i>
<em>同意快遞e棧注冊協定</em>
</label>
</div>
</div>
</section>
</section>
<script src="js/jquery.min.js"></script>
<script src="layer/layer.js"></script>
<script type="text/javascript">
var phoneReg = /(^1[3|4|5|7|8]\d{9}$)|(^09\d{8}$)/;
var count = 60;
var InterValObj1;
var curCount1;
function sendMessage1() {
curCount1 = count;
var phone = $.trim($('#phone1').val());
if (!phoneReg.test(phone)) {
alert(" 請輸入有效的手機号碼");
return false;
}
$("#btnSendCode1").attr("disabled", "true");
$("#btnSendCode1").val( + curCount1 + "秒再擷取");
InterValObj1 = window.setInterval(SetRemainTime1, 1000);
var windowId = layer.load();
// 發送短信
$.get("/wx/loginSms.do", {userPhone:phone}, function (data) {
layer.close(windowId);
layer.msg(data.result);
});
}
function SetRemainTime1() {
if (curCount1 == 0) {
window.clearInterval(InterValObj1);
$("#btnSendCode1").removeAttr("disabled");
$("#btnSendCode1").val("重新發送");
}
else {
curCount1--;
$("#btnSendCode1").val( + curCount1 + "秒再擷取");
}
}
function binding(){
if(!$(":checkbox").prop("checked")){
layer.msg("未勾選協定,無法登陸");
return;
}
//alert("正在登陸")
// window.location.href="index.html";
var userPhone = $.trim($('#phone1').val());
var code = $.trim($('#code1').val());
var windowId = layer.load();
$.post("/wx/login.do", {userPhone:userPhone, code:code}, function (data) {
layer.close(windowId);
if (data.status == 0 || data.status == 1) {
window.location.href = "index.html";
}
layer.msg(data.result);
}, "JSON");
}
</script>
</body></html>