博客系统(升级(Spring))(三)登录功能,注册功能,注销功能

博客系统 (三)

  • 博客系统
  • 登录用户
    • 前端
    • 后端
      • 数据查询(在mapper上添加mapper接口)
  • 注册用户
    • 前端
    • 后端
      • 插入数据
  • 注销

博客系统

博客系统是干什么的?
CSDN就是一个典型的博客系统。而我在这里就是通过模拟实现一个博客系统,这是一个较为简单的博客系统,但是主要功能一个不缺,不过就是 UI 有些 low,我学习前端是为了写后端更加顺手。不至于前后端完全分离,但是有个问题设计的 web 页面不是很好看。

首先我将整体的业务流程展现
在这里插入图片描述
我们继博客系统(二)继续,编写,到了主页的业务逻辑了

接下来的流程是通过,网页端,后端统一数据结构交互的数据结构。

登录用户

前端

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>登录页面</title><link rel="stylesheet" href="css/conmmon.css"><link rel="stylesheet" href="css/login.css"><script src="js/jquery.min.js"></script>
</head><body><!-- 导航栏 --><div class="nav"><img src="img/sleep.jpg" alt=""><span class="title">博客系统</span><!-- 用来占据中间位置 --><span class="spacer"></span><a href="blog_list.html">主页</a><a href="reg.html">注册</a></div><!-- 版心 --><div class="login-container"><!-- 中间的登路框 --><div class="login-dialog"><h3>登陆</h3><div class="row"><span>用户名</span><input type="text" id="username"></div><div class="row"><span>密码</span><input type="password" id="password"></div><div class="row"><button id="submit" onclick="mylogin()">提交</button></div></div></div><script>function mylogin(){var username =jQuery("#username");var password =jQuery("#password");if(username.val().trim()==""){alert("请先输入用户名!");username.focus();return false;}if(password.val().trim()==""){alert("请先输入密码!");password.focus();return false;}jQuery.ajax({url:"/user/login",type:"get",data:{"username":username.val().trim(),"password":password.val().trim()},success:function(res){if(res.code==200&&res.data==1){alert("登陆成功");location.href="blog_list.html";}else{alert(res.msg);//跳转信息location.href="login.html";}}});}mylogin();</script>
</body></html>

jQuery.ajax({
url:“/user/login”,
type:“get”,
data:{
“username”:username.val().trim(),
“password”:password.val().trim()
},

通过这个就能保证数据上传给服务器是一个json格式的数据

后端

数据查询(在mapper上添加mapper接口)

在这里插入图片描述
根据用户名查用户密码

@Mapper
public interface UserMapper {@Select("select * from userinfo where username=#{username}")Userinfo getUserName(@Param("username") String username);}

通过service层调用接口

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public Userinfo getUserName(String username){return userMapper.getUserName(username);}
}

通过Controller层调用service层服务

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/login")public ResultAjax login(UserinfoVO userinfoVO, HttpServletRequest request){if (userinfoVO==null||!StringUtils.hasLength(userinfoVO.getUsername())||!StringUtils.hasLength(userinfoVO.getPassword())) {return ResultAjax.fail(-1,"非法参数");}Userinfo result=userService.getUserName(userinfoVO.getUsername());if (result==null||result.getUid()==0){return ResultAjax.fail(-2,"用户名密码错误");}//对密码进行解密if (!PasswordUtils.decrypt(userinfoVO.getPassword(),result.getPassword())){return ResultAjax.fail(-2,"用户名密码错误");}HttpSession session=request.getSession();session.setAttribute(Variable.SESSION_USERINFO_KEY,result);return ResultAjax.success(1);}}

在这里插入图片描述

注册用户

前端

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><script src="js/jquery.min.js"></script><title>注册页面</title><link rel="stylesheet" href="css/conmmon.css"><link rel="stylesheet" href="css/login.css">
</head><body><!-- 导航栏 --><div class="nav"><img src="img/sleep.jpg" alt=""><span class="title">我的博客系统</span><!-- 用来占据中间位置 --><span class="spacer"></span><a href="blog_list.html">主页</a><a href="login.html">登录</a></div><!-- 版心 --><div class="login-container"><!-- 中间的注册框 --><div class="login-dialog"><h3>注册</h3><div class="row"><span>用户名</span><input type="text" id="username"></div><div class="row"><span>密码</span><input type="password" id="password"></div><div class="row"><span>确认密码</span><input type="password" id="password2"></div><div class="row"><button id="submit" onclick="mysub()">提交</button></div></div></div><script>//提交用户注册信息function mysub(){//非空校验var username =jQuery("#username");var password=jQuery("#password");var password2=jQuery("#password2");if(username.val().trim()==""){alert("请先输入用户名!");username.focus();return false;}if(password.val().trim()==""){alert("请先输入密码!");password.focus();return false;}if(password2.val().trim()==""){alert("请先输入确认密码");password2.focus();return false;}//密码是否一致if(password.val()!=password2.val()){alert("两次密码不一致,请先检查!");return false;}//将数据给客户端jQuery.ajax({url:"/user/reg",type:"post",data:{"username":username.val().trim(),"password":password.val().trim()},//将后端返回的结果展示给用户success:function(res){if(res.code==200&& res.data==1){//注册成功alert("恭喜,注册成功!");location.href="login.html";}else{//失败alert("抱歉:操作失败"+res.msg)}}});}mysub();</script>
</body></html>

后端

插入数据

将前端数据插入数据库,通过数据库验证密码的准确性

同样的编写mapper接口,调用数据库

@Mapper
public interface UserMapper {@Select("select * from userinfo where username=#{username}")Userinfo getUserName(@Param("username") String username);@Insert("insert into userinfo(username,password) values(#{username},#{password})")int  enrollUser (Userinfo userinfo);
}

通过service层调用接口

@Service
public class UserService {@Autowiredprivate UserMapper userMapper;public Userinfo getUserName(String username){return userMapper.getUserName(username);}public int enrollUser(Userinfo userinfo){return userMapper.enrollUser(userinfo);}
}

通过Controller层调用service层服务

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/login")public ResultAjax login(UserinfoVO userinfoVO, HttpServletRequest request){if (userinfoVO==null||!StringUtils.hasLength(userinfoVO.getUsername())||!StringUtils.hasLength(userinfoVO.getPassword())) {return ResultAjax.fail(-1,"非法参数");}Userinfo result=userService.getUserName(userinfoVO.getUsername());if (result==null||result.getUid()==0){return ResultAjax.fail(-2,"用户名密码错误");}if (!PasswordUtils.decrypt(userinfoVO.getPassword(),result.getPassword())){return ResultAjax.fail(-2,"用户名密码错误");}HttpSession session=request.getSession();session.setAttribute(Variable.SESSION_USERINFO_KEY,result);return ResultAjax.success(1);}@RequestMapping("/reg")public ResultAjax enrollUser(Userinfo userinfo){if (userinfo==null||StringUtils.hasLength(userinfo.getUsername())||!StringUtils.hasLength(userinfo.getPassword())){return ResultAjax.fail(-1,"非法参数");}userinfo.setPassword(PasswordUtils.encryption(userinfo.getPassword()));int result= userService.enrollUser(userinfo);return ResultAjax.success(result);}
}

注销

注销功能比较简单,只要将回话信息中对应的session给删了就行了。

@RestController
@RequestMapping("/user")
public class UserController {@Autowiredprivate UserService userService;@RequestMapping("/login")public ResultAjax login(UserinfoVO userinfoVO, HttpServletRequest request){if (userinfoVO==null||!StringUtils.hasLength(userinfoVO.getUsername())||!StringUtils.hasLength(userinfoVO.getPassword())) {return ResultAjax.fail(-1,"非法参数");}Userinfo result=userService.getUserName(userinfoVO.getUsername());if (result==null||result.getUid()==0){return ResultAjax.fail(-2,"用户名密码错误");}if (!PasswordUtils.decrypt(userinfoVO.getPassword(),result.getPassword())){return ResultAjax.fail(-2,"用户名密码错误");}HttpSession session=request.getSession();session.setAttribute(Variable.SESSION_USERINFO_KEY,result);return ResultAjax.success(1);}@RequestMapping("/reg")public ResultAjax enrollUser(Userinfo userinfo){if (userinfo==null||StringUtils.hasLength(userinfo.getUsername())||!StringUtils.hasLength(userinfo.getPassword())){return ResultAjax.fail(-1,"非法参数");}userinfo.setPassword(PasswordUtils.encryption(userinfo.getPassword()));int result= userService.enrollUser(userinfo);return ResultAjax.success(result);}@RequestMapping("/logout")public ResultAjax logout(HttpServletRequest request){HttpSession session=request.getSession();if (session!=null||session.getAttribute(Variable.SESSION_USERINFO_KEY)!=null){session.removeAttribute(Variable.SESSION_USERINFO_KEY);}return ResultAjax.success(1);}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/106333.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Java SSM+layui+mysql实现的图书借记管理系统源代码+数据库

介绍 本项目使用的技术栈是SSMlayuimysql&#xff0c;服务器使用的是tomcat 其中书籍图片存放的位置需要先在tomcat根目录下conf/setting.xml中配置虚拟路径&#xff0c;本项目配置的是D:\upload 完整代码下载地址&#xff1a;图书借记管理系统 用户角色划分 游客 使用本系…

SQL 注入漏洞攻击

文章目录 1. 介绍2. 无密码登录3. 无用户名无密码登录4. 合并表获取用户名密码 1. 介绍 假设你用自己的用户名和密码登录了一个付费网站&#xff0c;网站服务器就会查询一下你是不是 VIP 用户&#xff0c;而用户数据都是放在数据库中的&#xff0c;服务器通常都会向数据库进行查…

这一次,我顿悟了

大家好&#xff0c;我是苍何。昨晚和编程导航 星球嘉宾也是我的引路人闫&#xff08;yn&#xff09; 小林大佬&#xff0c;畅聊了 4 个 小时&#xff0c;至今内心还是久久不能平静。 小林和我一样是跨界转行&#xff0c;他是医学院毕业&#xff0c;大二开始自学编程&#xff0…

MySQL(一)

简介 MySQL是一个关系型数据库管理系统&#xff0c;由瑞典 Mysql AB 公司开发&#xff0c;属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一。 安装部署 yum源安装 [rootwenzi ~]# ls anaconda-ks.cfg mysql80-community-release-el7-10.noarch.rpm orig…

一起学数据结构(6)——栈和队列

上篇文章中&#xff0c;对栈的概念及特点进行了解释&#xff0c;并且给出了栈实现的具体代码。本篇文章将给出队列的基本概念及特点。并给出相应的代码。 1. 队列的概念及结构&#xff1a; 在给出队列的概念之前&#xff0c;先给出上篇文章中提到的栈的概念&#xff1a;一种只…

创建开机自启的脚本

在启动许多ros节点时有多种方式&#xff0c;我推荐使用launch来启动所有的节点&#xff0c;这也是一种规范的方式。以后会慢慢向这个方向靠。 除此之外还可以通过创建的脚本来启动&#xff1a; 脚本位置不限&#xff0c;只需要&#xff1a; sudo gedit xxx.sh在里面添加相应的…

【每天一道算法题】day2-认识时间复杂度

认识时间复杂度&#xff1a; O&#xff1a;读作big O&#xff0c;在数学上指的是上限的意思 常数时间的操作 一个操作如果和样本的数据量没有关系&#xff0c;每次都是固定时间内完成的操作&#xff0c;叫做常数操作。时间复杂度为一个算法流程中&#xff0c;常数操作数量的一…

html实现邮件模版布局-flex布局table布局-demo

邮件模版布局 flex - 布局简单方便 兼容性差 table - 优点 就是兼容性好&#xff0c;其他没有优点 注&#xff1a;使用图片需要png最好&#xff0c;使用svg图google邮箱会出现不能使用的情况 效果图 flex布局 <!DOCTYPE html> <html lang"en" xmlns:th&qu…

ps怎么只改变logo的文字颜色,不改变图案颜色

1.首先把图片的psd格式拖进去 2.复制一层 3.使用框选工具选出不需要改的部分 4.选着图层--图层样式--颜色叠加--&#xff08;叠加成你需要的颜色&#xff09; 5.删除框选区域 5&#xff0c;另存为即可 原理就是框选的区域是不受保护的&#xff0c;可以进行操作&#xff0…

BGP感想

BGP 边界网关协议 属于外部或域间路由协议&#xff0c;距离矢量路由协议。 AS(自治系统)&#xff0c;在一个自治系统内运行osfp,is-is,rip,vlan等,实现AS内网络互通。 BGP做什么&#xff0c;为处于不同自治系统&#xff08;AS&#xff09;中的路由器之间进行“路由信息通信…

蓝桥杯官网填空题(三角形的面积)

题目描述 本题为填空题&#xff0c;只需要算出结果后&#xff0c;在代码中使用输出语句将所填结果输出即可。 已知三角形三个顶点在直角坐标系下的坐标分别为&#xff1a; txt (2.3, 2.5) (6.4, 3.1) (5.1, 7.2) txt 求该三角形的面积。 注意&#xff0c;要提交的是一个小…

github 创建自己的分支 并下载代码

github创建自己的分支 并下载代码 目录概述需求&#xff1a; 设计思路实现思路分析1.进入到master分支&#xff0c;git checkout master;2.master-slave的个人远程仓库3.爬虫调度器4.建立本地分支与个人远程分支之间的联系5.master 拓展实现 参考资料和推荐阅读 Survive by day…