接上一篇搭建Mybatis逆向工程

要实现的页面:

1. 登录功能实现Mapper层

上一篇在Mybatis逆向工程中配置Dao层的存放路径,放在了com.lyx.settings.mapper路径下,打开这个包,可以看到UserMapper.java类,
在类中添加selectUserByLoginActAndPwd()方法

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

  1. 因为需要两个参数,所以使用Map集合做参数
  2. 在映射文件UserMapper.xml文件中添加如下
  3. controller层给的map参数的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. 登录功能实现Service层

在com.lyx.settings.service下新建接口UserService,新建impl包,定义UserServiceImpl实现UserService接口

UserServiceImpl代码:

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

3. 登录功能实现Controller层

3.1 判断用户名和密码

打开在com.lyx.settings.web.controller包下UserController.java

  1. 在实现首页功能时就已经创建了UserController.java

  2. 里面有个toLogin()方法跳转到login.jsp页面

  3. 添加login()方法

  4. login()方法返回值为Object类型

  5. 在返回值前并添加@ResponseBody注解,解析为json字符串

  6. login()方法上添加@RequestMapping(“/settings/qx/user/login.do”)

  7. login()方法从login.jsp页面获取用户填写的用户名和密码,login.jsp页面通过$.ajax()的url="/settings/qx/user/login.do"传值给login方法

  8. 调用Service层方法去数据库里面查找该用户: 添加UserService属性,在该属性上添加@Autowired注解

  9. 提前定义一个ReturnObject.java类,里面给3个属性:

  10. 判断用户名和密码是否正确,就是看能不能查到,如果查不到,把刚刚定义的returnObject的code属性设置为0,message属性设置为“用户名或密码错误”,返回returnObject

3.2 用户名密码正确,再判断

User user = userService.queryUserByLoginActAndPwd(map);

user不为空
说明查到了数据,下面判断user的其他值

3.2.1 是否过期

判断user的uExpireTime属性

  1. 把当前时间格式化成“yyyy-MM-dd HH:mm:ss”的形式
SimpleDateFormat sdf = new SimpleDateFormat();
String format = sdf.format(new Date());
  1. format.compareTo(user.getuExpireTime())

3.2.2 是否失效

判断user的uLockState属性

  1. “0”.equals(user.getuLockState())

3.2.3 ip地址是否受限

判断user的uAllowIps属性

  1. 获取当前ip地址
request.getRemoteAddr();
  1. user.getuAllowIps().contain()是否包含当前ip地址
user.getuAllowIps().contains(request.getRemoteAddr())

3.2 Contants类

定义一个Contants类,把上面出现的“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. 实现Login.jsp页面

  1. Username和Password输入框、登录按钮、checkbox都添加id,$(“#LoginAct”)获取
  2. beforeSend: function () {}当ajax向后台发送请求之前,会自动执行本函数该函数的返回值能够决定ajax是否真正向后台发送请求;如果该函数返回true,则ajax会正在向后台发送请求,否则,如果该函数返回false则ajax放弃向后台发送请求
beforeSend: function () {$("#msg").text("正在努力验证....");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) {//封装参数Map<String, Object> map = new HashMap<>();map.put("LoginAct", loginAct);map.put("LoginPwd", loginPwd);//调用service层方法User user = userService.queryUserByLoginActAndPwd(map);ReturnObject returnObject = new ReturnObject();if (user == null) {//登录失败,用户名或密码错误returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("用户名或密码错误");} else {SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");String format = simpleDateFormat.format(new Date());if (format.compareTo(user.getuExpireTime()) > 0) {//登录失败,账号已经过期了returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("账号已过期");} else if ("0".equals(user.getuLockState())) {//登录失败,状态被锁定returnObject.setCode(Contants.RETURN_OBJECT_CODE_FAIL);returnObject.setMessage("状态被锁定");} else if(!user.getuAllowIps().contains(request.getRemoteAddr())){//判断当前用户的ip地址是不是包含在数据库表里的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的函数let isRemPwd1 = $("#isRemPwd").prop("checked")//表单数据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";//跳转到controller,不能直接跳转到静态页面} else {$("#msg").html(ret.message);}},beforeSend: function () {//当ajax向后台发送请求之前,会自动执行本函数该函数的返回值能够决定ajax是否真正向后台发送请求://如果该函数返回true,则ajax会正在向后台发送请求,否则,如果该函数返回false则ajax放弃向后台发送请求$("#msg").text("正在努力验证....");return true;}})});})</script>
</head>
<body>
<div style="position: relative;background-color: black"><img src="data: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>

CRM-登录功能实现相关推荐

  1. crm登录功能实现记住我

    1.后台接受前台传过来"记住我"的值() package com.shsxt.crm.user.controller;import com.shsxt.crm.base.BaseR ...

  2. crm项目案列 java_Java CRM系统用户登录功能实现代码实例

    用户登录功能后台代码实现: UserMapper接口查询方法定义 /** * * @param userName * @param userPwd * @param roleName * 查询用户记录 ...

  3. CRM客户关系管理系统开发第二讲——实现用户的注册和登录功能

    实现用户注册功能 创建用户表 首先创建一个数据库(例如crm),并在该数据库下新建一张用户表,笔者这里使用的数据库是MySQL. create database crm; use crm;CREATE ...

  4. 《SAP CRM管理与实施指南》一一2.2 SAP CRM基础功能

    本节书摘来自华章计算机<SAP CRM管理与实施指南>一书中的第2章,第2.2节,作者:邹荫文 著,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 2.2 SA ...

  5. axure动态登录和html5,Axure8原型设计实战案例:如何实现登录功能?

    登录功能是一个非常常见的功能,几乎所有的产品都有登录功能,登录功能可以很简单,也可以非常复杂.我们在用axure做产品原型设计的时候,都会涉及到登录功能,那么,登录功能是怎么设计出来的呢? 本文和大家 ...

  6. Android逆向之路---Faceu的登录功能真的只提交了用户名和密码吗

    问题 几乎99%的软件都有登录功能,而登录这一个动作真的将我们的用户名和密码上传到了服务器吗,会不会有个人隐私呢.根据我们这个问题,我们用FaceU这个软件,逆向来看看他的登录功能到底都传了什么数据. ...

  7. flask框架如何实现修改密码和免密登录功能

    flask是python web开发的常用框架之一.本文将讲述flask如何实现修改密码和免密登录功能 修改密码功能 数据库部分: #重置密码 def reset_pass(phone,passwor ...

  8. java 自动登录功能_jsp实现用户自动登录功能

    理解并掌握cookie的作用以及利用cookie实现用户的自动登录功能,实现下图效果 当服务器判断出该用户是首次登录的时候,会自动跳转到登录界面等待用户登录,并填入相关信息.通过设置cookie的有效 ...

  9. 完成登录功能,用session记住用户名

    登录功能完成: js:设置return html:设置 form input οnclick="return fnLogin()" py: @app.route设置methods ...

  10. java 登录按钮响应数据库_用户登录功能的实现—从前端到后台(包括数据库)...

    温馨提示:本文难度有点大,建议收藏后在阅读! 首先给大家分享一件糗事! 本来今天这篇文会很长的 写到一半突然发现 还没有给大家分享 数据库 jdbc MVC模式 直接就来分享实战了 我的锅! 源码会分 ...

最新文章

  1. 残差网络的前世今生与原理 | 赠书
  2. 跨域 (3) window.name
  3. PayPal 开发详解(六):下载paypal立即付款SDK 并编译打包
  4. spring mvc传值html页面,spring mvc向前台页面传值-ModelAndView
  5. C++(STL):09---vector迭代器失效问题
  6. flowable连线名称不显示bug修复说明
  7. android刷机方法,介绍一种android的裸刷机方法(fastboot刷机实质)
  8. oracle中的hint是什么,SQL优化过程中常见Oracle中HINT的30个用法
  9. 最简单的视音频播放示例5:OpenGL播放RGB/YUV
  10. ON_EVENT 报错
  11. 电影海报页面设计Html5,如何设计电影海报
  12. Windows XP SP3 下 High Definition Audio 声卡安装方法
  13. ASO如何做_ASO优化方案
  14. 象棋马走日全球变暖——(bfs例题)
  15. SpringCloud学习系列之三-----配置中心(Config)文件修改后,客户端动态刷新(Refresh)
  16. Python多个数组合并(拼接)为一个数组
  17. 法国大数据分析协作初创企业Dataiku获1400万美元风险投资
  18. springboot整合elasticsearch及热更新字典及同义词
  19. python+django+vue二手车信息网站flask
  20. 查看电脑已经安装了的数据库

热门文章

  1. 帐号实名制及其方式-修订版1.0
  2. 常德职业技术学院计算机系,常德职业技术学院有哪些专业 附好的重点专业名单...
  3. 迭代子模式 php,螃蟹学PHP设计模式之迭代器模式
  4. qt之QCustomPlot动态时间轴更新曲线
  5. JAVA企业面试题精选 Java SE 91-100
  6. jquery折叠卡片
  7. 医学生可以跨专业考计算机的专业,写给那些本科不是医学专业,准备跨考医学专业同学的信......
  8. linux恢复成裸设备,Linux下的裸设备研究(转) ---rawdevices
  9. 2019全国职业院校“网络空间安全”MS17-010安全自制题
  10. 大白鲨 LED 拆机