博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SSM 实战项目①丨图书管理系统 丨(4) 登录操作的实现
阅读量:2829 次
发布时间:2019-05-14

本文共 6480 字,大约阅读时间需要 21 分钟。

login

本篇隶属于《SSM 实战项目①丨图书管理系统 》

详情请见:


0. 准备一个登录界面和跳转的界面

image-20200605162101905

我这里已经有小伙伴帮我做好登录界面了,如果需要的话,可以在项目源码中获取,也可以在 Bootstrap 的样例界面中拿到,下面附上链接:

本篇主要讲解登录的后端实现逻辑,对于前端的各种界面样式就不过多赘述了。

下面直接进入正题。


image-20200606164043094


1. 检查用户名是否存在

[1] 前端发送 ajax 请求检验用户名是否存在
function validate_managerName_exists(managerName,loginOrRegister) {
$.ajax({
async: false, //关闭 ajax 异步请求,这样 ajax 请求后面的语句才能执行 url:"${APP_PATH}/checkManagerNameExists", //调用控制器暴露出来的接口 data:"managerName="+ managerName, //传递参数 type:"POST", //使用 POST 方法 success:function (result) {
//我这里定义 code == 100 说明用户名存在 if(result.code==100){
if(loginOrRegister == "login") //在登录的时候存在即为成功 {
show_validate_msg("#login-managerName-input","success",""); acceptThrough = "true"; }else{
//在注册的时候存在即为失败 show_validate_msg("#manager_name_input","error",result.extend.va_register_name_msg); acceptThrough = "false"; } //code == 200 说明用户名不存在 }else{
if(loginOrRegister == "login") //在登录的时候不存在即为失败 {
show_validate_msg("#login-managerName-input","error",result.extend.va_login_name_msg); acceptThrough = "false"; }else{
//在注册的时候不存在即为成功 show_validate_msg("#manager_name_input","success",result.extend.va_register_name_msg); acceptThrough = "true"; } } } }); //判断是否允许跳转界面 if(acceptThrough == "false"){
return false; }else{
return true; }}
[2] 在 Controller 中提供接口 checkManagerNameExists
/** * 检查用户名是否存在 * @param managerName * @return */@ResponseBody@RequestMapping(value = "/checkManagerNameExists",method = RequestMethod.POST)public Msg checkManagerNameExists(@RequestParam("managerName") String managerName){
//1. 检查用户名是否存在 boolean b = managerService.checkManagerNameExists(managerName); if(b){
return Msg.success().add("va_register_name_msg","用户名已存在!请更换用户名!"); }else{
return Msg.fail().add("va_login_name_msg","用户名不存在!请注册!").add("va_register_name_msg","用户名可用!"); }}

ps:Msg 类是笔者自行定义的统一传递给前端的类,@ResponseBody 会将这个类的信息封装成 Json 字符串传递给前端,具体定义如下:

package com.bean;import java.util.HashMap;import java.util.Map;/** *  统一传递给前端的数据的实体类 * @author Hedon Wang * @create 2020-05-26 11:59 */public class Msg {
private Integer code; //状态码 100-成功,200-失败 private String message; //提示信息 private Map
extend = new HashMap<>(); //用户要返回给浏览器的信息 //成功 public static Msg success(){
Msg result = new Msg(); result.setCode(100); result.setMessage("处理成功!"); return result; } //失败 public static Msg fail(){
Msg result = new Msg(); result.setCode(200); result.setMessage("处理失败!"); return result; } public Msg add(String key,Object keyValue){
this.getExtend().put(key,keyValue); return this; } public Integer getCode() {
return code; } public void setCode(Integer code) {
this.code = code; } public String getMessage() {
return message; } public void setMessage(String message) {
this.message = message; } public Map
getExtend() {
return extend; } public void setExtend(Map
extend) {
this.extend = extend; }}

我们在控制层中调用了服务层的方法 managerService.checkManagerNameExists(managerName),这个时候这个方法我们还没实现,需要来实现它(笔者这里编写代码的逻辑是由外到内,而不是由内到外)。

[3] 在 Service 层中提供 checkManagerNameExists 服务
/** * 检查用户名是否存在 * @param managerName * @return */public boolean checkManagerNameExists(String managerName) {
ManagerExample managerExample = new ManagerExample(); ManagerExample.Criteria criteria = managerExample.createCriteria(); criteria.andManagerNameEqualTo(managerName); long l = managerMapper.countByExample(managerExample); System.out.println(l); return l==1;}

Service层中调用 dao 层的接口 managerMapper.countByExample(managerExample),这个接口我们在使用 MyBatis Generator 逆向工程的时候已经帮助我们自动生成了。我们通过这个接口方法可以获得数据库中有多少个 manger 的名称等于 managerName,如果结果为1(managerName是唯一的),那么就说明用户名存在(可登录不可注册),如果结果为0,说明还不存在(可注册不可登录)。

这样检查用户名是否存在的逻辑就写好了。

2. 检查密码是否正确

[1] 前端发送 ajax 请求判断密码是否正确

当用户名检查出来是存在的时候,就进入检查密码是否正确这个步骤。

同样是前端发送 ajax 请求,访问控制层暴露出来的接口 checkManagerPwd,根据后端返回过来的信息来判断密码是否正确。

function validate_managerPwd_right(managerName,managerPwd){
$.ajax({
url:"${APP_PATH}/checkManagerPwd", data:"managerName="+managerName+"&managerPwd="+managerPwd, type:"GET", success:function (result) {
//密码正确 if(result.code == 100){
show_validate_msg("#login-managerPwd-input","success",""); $("#save").prop("ajax-va","success"); window.location.href="${APP_PATH}/bookRank"; //跳转界面 //密码错误 }else{
show_validate_msg("#login-managerPwd-input","error",result.extend.va_pwd_msg); $("#save").prop("ajax-va","error"); } } })}
[2] 在 Controller 中提供接口 checkManagerPwd
/** * 检查密码是否错误 * @param managerPwd * @return */@ResponseBody@RequestMapping(value = "/checkManagerPwd",method = RequestMethod.GET)public Msg checkManagerPwd(@RequestParam(value = "managerName") String managerName,                           @RequestParam(value = "managerPwd") String managerPwd,                           HttpSession session){
boolean b = managerService.checkManagerPwd(managerName,managerPwd); if(b){
//验证通过 //将用户信息放入session session.setAttribute("loginName",managerName); return Msg.success(); }else{
return Msg.fail().add("va_pwd_msg","密码错误,请重新输入!"); }}
[3] 在 Service 中提供 checkManagerPwd 服务

Service 层的逻辑就是检查同时满足传进来 managerName 和 managerPwd 的 manager 有几个,1个表示正确,0个表示错误。

/** * 检查用户密码是否正确 * @param managerName * @param managerPwd * @return */public boolean checkManagerPwd(String managerName,String managerPwd) {
ManagerExample managerExample = new ManagerExample(); ManagerExample.Criteria criteria = managerExample.createCriteria(); criteria.andManagerNameEqualTo(managerName); criteria.andManagerPwdEqualTo(managerPwd); long l = managerMapper.countByExample(managerExample); return l==1;}

这样整个登录操作的实现就完成啦~


有纰漏之处,还望不吝指出~


转载地址:http://wqded.baihongyu.com/

你可能感兴趣的文章
Freeswitch 音视频编码支持
查看>>
FreeSwitch 编码协商
查看>>
SIP DTMF telephone-event
查看>>
双向链表的算法设计和实现(数据结构)
查看>>
Chapter3 HTTP报文
查看>>
Chapter2 NIO入门
查看>>
NIO 入门(1)(from Jakob Jenkov)
查看>>
Java NIO Overview(2)
查看>>
JavaNIO Channel(3)
查看>>
Java NIO Buffer(4)
查看>>
JavaNIO Scatter\Gather(5)
查看>>
Java NIO Channel to Channel Transfers(6)
查看>>
4 Project Outline
查看>>
简单的IP验证方法(拦截器、过滤器、切面)to complete
查看>>
Java中的原子操作
查看>>
CAS
查看>>
double在内存中的解析方式
查看>>
Unidbg系列--模拟调用So文件
查看>>
IDA Python模块找不到,修改解释器
查看>>
DumpSo
查看>>