CRM-登录功能实现
接上一篇搭建Mybatis逆向工程
要實(shí)現(xiàn)的頁面:
1. 登錄功能實(shí)現(xiàn)Mapper層
上一篇在Mybatis逆向工程中配置Dao層的存放路徑,放在了com.lyx.settings.mapper路徑下,打開這個(gè)包,可以看到UserMapper.java類,
在類中添加selectUserByLoginActAndPwd()方法
2. 登錄功能實(shí)現(xiàn)Service層
在com.lyx.settings.service下新建接口UserService,新建impl包,定義UserServiceImpl實(shí)現(xiàn)UserService接口
UserServiceImpl代碼:
3. 登錄功能實(shí)現(xiàn)Controller層
3.1 判斷用戶名和密碼
打開在com.lyx.settings.web.controller包下UserController.java
在實(shí)現(xiàn)首頁功能時(shí)就已經(jīng)創(chuàng)建了UserController.java
里面有個(gè)toLogin()方法跳轉(zhuǎn)到login.jsp頁面
添加login()方法
login()方法返回值為Object類型
在返回值前并添加@ResponseBody注解,解析為json字符串
login()方法上添加@RequestMapping(“/settings/qx/user/login.do”)
login()方法從login.jsp頁面獲取用戶填寫的用戶名和密碼,login.jsp頁面通過$.ajax()的url="/settings/qx/user/login.do"傳值給login方法
調(diào)用Service層方法去數(shù)據(jù)庫里面查找該用戶: 添加UserService屬性,在該屬性上添加@Autowired注解
提前定義一個(gè)ReturnObject.java類,里面給3個(gè)屬性:
判斷用戶名和密碼是否正確,就是看能不能查到,如果查不到,把剛剛定義的returnObject的code屬性設(shè)置為0,message屬性設(shè)置為“用戶名或密碼錯(cuò)誤”,返回returnObject
3.2 用戶名密碼正確,再判斷
即
User user = userService.queryUserByLoginActAndPwd(map);user不為空
說明查到了數(shù)據(jù),下面判斷user的其他值
3.2.1 是否過期
判斷user的uExpireTime屬性
3.2.2 是否失效
判斷user的uLockState屬性
3.2.3 ip地址是否受限
判斷user的uAllowIps屬性
3.2 Contants類
定義一個(gè)Contants類,把上面出現(xiàn)的“0”和“1”替換成變量
package com.lyx.commons.contants;public class Contants {//保存ReturnObject類中的Code值public static final String RETURN_OBJECT_CODE_SUCCESS="1";public static final String RETURN_OBJECT_CODE_FAIL="0"; }4. 實(shí)現(xiàn)Login.jsp頁面
5. 完整代碼
5.1 controller層
package com.lyx.settings.web.controller;import com.lyx.commons.contants.Contants; import com.lyx.commons.domain.ReturnObject; import com.lyx.settings.domain.User; import com.lyx.settings.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import org.springframework.web.bind.annotation.RestController;import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import java.text.SimpleDateFormat; import java.util.Date; import java.util.HashMap; import java.util.Map;@Controller public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/settings/qx/user/toLogin.do")public String toLogin() {return "settings/qx/user/login";}@RequestMapping("/settings/qx/user/login.do")public @ResponseBody Object login(String loginAct, String loginPwd, String isRemPwd, HttpServletRequest request) {//封裝參數(shù)Map<String, Object> map = new HashMap<>();map.put("LoginAct", loginAct);map.put("LoginPwd", loginPwd);//調(diào)用service層方法User user = userService.queryUserByLoginActAndPwd(map);ReturnObject returnObject = new ReturnObject();if (user == null) {//登錄失敗,用戶名或密碼錯(cuò)誤returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("用戶名或密碼錯(cuò)誤");} else {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = simpleDateFormat.format(new Date());if (format.compareTo(user.getuExpireTime()) > 0) {//登錄失敗,賬號(hào)已經(jīng)過期了returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("賬號(hào)已過期");} else if ("0".equals(user.getuLockState())) {//登錄失敗,狀態(tài)被鎖定returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("狀態(tài)被鎖定");} else if(!user.getuAllowIps().contains(request.getRemoteAddr())){//判斷當(dāng)前用戶的ip地址是不是包含在數(shù)據(jù)庫表里的u_allow_ips//不包含,登錄失敗,ip受限制returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("ip受限制");}else{returnObject.setCode(Contants.RETURN_OBJECT_CODE_SUCCESS);//把user保存到session作用域中HttpSession session = request.getSession();session.setAttribute(Contants.SESSION_USER,user);}}return returnObject;} }5.2. login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <%String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + request.getContextPath() + "/"; %> <html lang="en"> <head><base href="<%=basePath%>"><meta charset="UTF-8"><title>Title</title><link rel="stylesheet" type="text/css" href="jquery/bootstrap-3.4.1/dist/css/bootstrap.min.css"/><script type="text/javascript" src="jquery/jquery-3.5.1.js"></script><script type="text/javascript" src="jquery/bootstrap-3.4.1/dist/js/bootstrap.min.js"></script><script type="text/javascript">$(function () {$("#loginBtn").click(function () {//trim()去除空格let loginAct1 = $.trim($("#loginAct").val());let loginPwd1 = $.trim($("#loginPwd").val());//attr獲取屬性值,獲取不到值是true或者false的屬性值,例如checkbox,selected,readonly,disabled// $("#isRemPwd").attr("")//prop()專門用來獲取值是true或者false的函數(shù)let isRemPwd1 = $("#isRemPwd").prop("checked")//表單數(shù)據(jù)if (loginAct1 == "" || loginPwd1 == "") {alert("Username or Password can't be null!!");return;}$.ajax({url: "settings/qx/user/login.do",data: {loginAct: loginAct1,loginPwd: loginPwd1,isRemPwd: isRemPwd1},type: "post",dataType: "json",success: function (ret) {if (ret.code == "1") {window.location.href = "/workbench/index.do";//跳轉(zhuǎn)到controller,不能直接跳轉(zhuǎn)到靜態(tài)頁面} else {$("#msg").html(ret.message);}},beforeSend: function () {//當(dāng)ajax向后臺(tái)發(fā)送請求之前,會(huì)自動(dòng)執(zhí)行本函數(shù)該函數(shù)的返回值能夠決定ajax是否真正向后臺(tái)發(fā)送請求://如果該函數(shù)返回true,則ajax會(huì)正在向后臺(tái)發(fā)送請求,否則,如果該函數(shù)返回false則ajax放棄向后臺(tái)發(fā)送請求$("#msg").text("正在努力驗(yàn)證....");return true;}})});})</script> </head> <body> <div style="position: relative;background-color: black"><img src="image/xanadu.jpg" style="width: 50%;height: 100%;"><div style="position:absolute;top:10px;right:5px;width: 50%;float: right;"><div class="modal-dialog" role="document" style="width: 80%;"><div class="modal-content"><div class="modal-header"><button type="button" class="close" data-dismiss="modal" aria-label="Close"><spanaria-hidden="true">×</span></button><h4 class="modal-title">登錄</h4></div><form class="form-horizontal"><div class="modal-body"><div class="form-group"><label for="inputEmail3" class="col-sm-2 control-label">Username</label><div class="col-sm-10"><input id="loginAct" name="loginAct" type="text" class="form-control" id="inputEmail3"placeholder="Username"></div></div><div class="form-group"><label for="inputPassword3" class="col-sm-2 control-label">Password</label><div class="col-sm-10"><input id="loginPwd" name="loginPwd" type="password" class="form-control"id="inputPassword3" placeholder="Password"></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><div class="checkbox"><label><input id="isRemPwd" name="isRemPwd" type="checkbox"> Remember me</label></div></div></div><div class="form-group"><div class="col-sm-offset-2 col-sm-10"><button id="loginBtn" type="button" class="btn btn-default">Login in</button></div></div><div><span style="color: red" id="msg"></span></div></div></form></div><!-- /.modal-content --></div><!-- /.modal-dialog --></div> </div> </body> </html>總結(jié)
以上是生活随笔為你收集整理的CRM-登录功能实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 企业+员工能力评价
- 下一篇: 厦门大学考研真题笔记:334新闻与传播专