日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CRM-登录功能实现

發(fā)布時(shí)間:2024/1/18 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CRM-登录功能实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

接上一篇搭建Mybatis逆向工程

要實(shí)現(xiàn)的頁面:

1. 登錄功能實(shí)現(xiàn)Mapper層

上一篇在Mybatis逆向工程中配置Dao層的存放路徑,放在了com.lyx.settings.mapper路徑下,打開這個(gè)包,可以看到UserMapper.java類,
在類中添加selectUserByLoginActAndPwd()方法

User selectUserByLoginActAndPwd(Map<String,Object> map);

  • 因?yàn)樾枰獌蓚€(gè)參數(shù),所以使用Map集合做參數(shù)
  • 在映射文件UserMapper.xml文件中添加如下
  • controller層給的map參數(shù)的key值必須與#{LoginAct}和#{LoginPwd}同名
  • <select id="selectUserByLoginActAndPwd" parameterType="map" resultMap="BaseResultMap">select<include refid="Base_Column_List"/>from tbl_userwhere u_login_act=#{LoginAct} and u_login_pwd=#{LoginPwd}</select>

    2. 登錄功能實(shí)現(xiàn)Service層

    在com.lyx.settings.service下新建接口UserService,新建impl包,定義UserServiceImpl實(shí)現(xiàn)UserService接口

    UserServiceImpl代碼:

  • 添加注解@Service(“userService”)
  • 添加UserMapper屬性,在UserMapper屬性上添加@Autowired注解
  • 方法返回值如下
  • @Service("userService") public class UserServiceImpl implements UserService {@Autowiredprivate UserMapper userMapper;@Overridepublic User queryUserByLoginActAndPwd(Map<String, Object> map) {return userMapper.selectUserByLoginActAndPwd(map);} }

    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屬性

  • 把當(dāng)前時(shí)間格式化成“yyyy-MM-dd HH:mm:ss”的形式
  • SimpleDateFormat sdf = new SimpleDateFormat(); String format = sdf.format(new Date());
  • format.compareTo(user.getuExpireTime())
  • 3.2.2 是否失效

    判斷user的uLockState屬性

  • “0”.equals(user.getuLockState())
  • 3.2.3 ip地址是否受限

    判斷user的uAllowIps屬性

  • 獲取當(dāng)前ip地址
  • request.getRemoteAddr();
  • user.getuAllowIps().contain()是否包含當(dāng)前ip地址
  • user.getuAllowIps().contains(request.getRemoteAddr())

    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頁面

  • Username和Password輸入框、登錄按鈕、checkbox都添加id,$(“#LoginAct”)獲取
  • 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ā)送請求
  • beforeSend: function () {$("#msg").text("正在努力驗(yàn)證....");return true; }


    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">&times;</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)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。