开发基于SpringBoot和BootStrap的全栈论坛网站(三):登陆注册以及cookies的功能完成

news/2024/5/9 23:57:02/文章来源:https://javayz.blog.csdn.net/article/details/103004974

如果你对这个项目感兴趣,可以从头看起:

开发基于SpringBoot和BootStrap的全栈论坛网站(一):准备阶段

开发基于SpringBoot和BootStrap的全栈论坛网站(二):后端人员如何快速使用BootStrap

登陆注册功能是一个网站必不可少的功能,其主要思路也相对很简单,获取用户输入的信息,验证信息,若成功则上传到后台数据库。登陆时获取用户信息,如果和数据库中的用户信息匹配,则登陆成功,并把登陆成功的信息写入cookies和session,使用户在未来几天内登陆可以不用输账号密码。源码会放在文末,源码的开发进度会快于这篇博客。

(一)分别搭建一个登陆和注册界面

这一步的界面依旧来自于Bootstrap官网,官网的起步处正好有登陆界面,那就直接拿过来修改一下了,login.html:

<!DOCTYPE html>
<html>
<head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>登陆界面</title><!-- 最新版本的 Bootstrap 核心 CSS 文件 --><link rel="stylesheet" href="css/bootstrap.min.css"/><!-- 可选的 Bootstrap 主题文件(一般不用引入) --><link rel="stylesheet" href="css/bootstrap-theme.min.css"><link href="css/signin.css" rel="stylesheet">
</head>
<body>
<div class="container"><form class="form-signin" action="/logincheck" method="post"><h2 class="form-signin-heading">Please sign in</h2><label for="username" class="sr-only">Username</label><input type="username" id="username" name="username" class="form-control" placeholder="Username" required autofocus><label for="password" class="sr-only">Password</label><input type="password" id="password" name="password" class="form-control" placeholder="Password" required><div class="checkbox"><label><input type="checkbox" value="remember-me"> Remember me</label></div><button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button><span><a href="/register" style=" font-size: 12px;float: right;margin-top: 7px;">重新注册一个用户</a></span></form>
</div> <!-- /container -->
<script src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>
<!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
<script src="js/bootstrap.min.js"></script>
</body>
</html>

写个css来美化一下页面的布局signin.css,具体的css代码请前往文末源码处查看:

这样一个登陆界面就完成了,注册页面和登陆界面基本一样,只需要复制过去稍作修改就行。前端的内容毕竟不是我们的主要内容,对后端SpringBoot的深入理解才是我们真正要做的事情。

(二)登陆与注册的后端处理逻辑

对于目前的数据库表,还是以最简单的表结构为主,后期需要增加新内容时继续修改就行

CREATE TABLE `user` (`id` int(11) NOT NULL AUTO_INCREMENT,`name` varchar(45) NOT NULL,`password` varchar(45) NOT NULL,`token` varchar(45) NOT NULL,PRIMARY KEY (`id`)
) 

目前只包含四个属性,用户id控制用户唯一性,用户名和密码不用多讲,token是接下来写cookie时会用到的一个属性,主要保存cookie的一个值。对数据库的增删改查全部写在mapper包下,新建一个UserMapper,通过注解的形式实现增删改查。

@Mapper
public interface UserMapper {@Insert("insert into user(name,password,token) values (#{name},#{password},#{token})")void insert(User user);@Select("select * from user where name=#{name} and password=#{password}")User select(User user);@Select("select  * from user where token=#{token}")User findBytoken(String token);@Select("select * from user where id=#{createid}")User findById(int createid);
}

先写注册的controller,@GetMapping处理get请求,@PostMapping处理Post请求,在注册时会随机生成一个token,如果注册成功直接跳转到首页,并写入cookies

@Controller
public class registerController {@Resourceprivate UserMapper userMapper;@GetMapping("/register")public String register(){return "register";}@PostMapping("/registercheck")public String registercheck(HttpServletRequest request,HttpServletResponse response){String username=request.getParameter("username");String password=request.getParameter("password");//随机生成一个token用来当cookies的valueString token= UUID.randomUUID().toString();User user=new User();user.setName(username);user.setPassword(password);user.setToken(token);userMapper.insert(user);//如果用户注册成功,则把用户信息写进cookies,直接跳转到主页if(userMapper.select(user)!=null){response.addCookie(new Cookie("token",token));return "redirect:/index";}else {//注册失败,处理方法先省略return "register";}}
}

loginController的实现方式也和注册类似,通过查询数据库确定用户是否存在,如果存在则写入cookies并跳转到index首页。登陆失败后的处理流程目前还未写。

@Controller
public class logincontroller {@Resourceprivate UserMapper userMapper;@GetMapping("/login")public String login(){return "login";}@PostMapping("/logincheck")public String checklogin(HttpServletRequest request, HttpServletResponse response){//通过request获取输入的用户名和密码在数据库中查找相关用户,如果存在就登陆成功User user=new User();String name=request.getParameter("username");String password=request.getParameter("password");user.setName(name);user.setPassword(password);User newUser=userMapper.select(user);if(newUser != null){String token=newUser.getToken();response.addCookie(new Cookie("token",token));}else{//登陆失败,重新登陆}return "redirect:/index";}
}

跳转到index主页后indexController需要去处理cookies信息,把用户信息写进session中方便html的调用:

@Controller
public class indexController {@GetMapping("/index")public String index(HttpServletRequest request,Model model){//查找cookies,观察是否有token存在Cookie[] cookies=request.getCookies();if(cookies==null){return "login";}User user=null;for (Cookie cookie:cookies){if(cookie.getName().equals("token")){String token=cookie.getValue();user=userMapper.findBytoken(token);if(user!=null){request.getSession().setAttribute("user",user);}break;}}return "index";}
}

最后在index.html文件中做个小小的改动,我希望当检测到用户登陆时,在顶端的导航栏右侧显示用户个人名,如果用户未登录,则显示登陆按钮,我们使用Thymeleaf框架实现数据传送,关于Thymeleaf如何使用,我在这篇博客里有介绍如何优雅的将Thymeleaf集成到SpringBoot

<li th:if="${session.user == null}"><a href="/login">登陆</a></li>
<li class="dropdown" th:if="${session.user} != null"><a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false" th:text="${session.user.getName()}"><span class="caret"></span></a><ul class="dropdown-menu"><li><a href="#">消息中心</a></li><li><a href="#">个人资料</a></li><li><a href="#">退出登陆</a></li></ul>
</li>

通过th:if语句来识别用户是否已经登陆,如果已经登陆,就显示用户名,如果未登陆,则显示登陆。最后附上源代码:

github代码

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

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

相关文章

开发基于SpringBoot和BootStrap的全栈论坛网站(四):完成问题发布功能

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(五):完成首页展示以及分页功能

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(六):完成个人中心、问题详情和问题编辑

如果你对这个项目感兴趣&#xff0c;可以从头看起&#xff1a; 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;一&#xff09;&#xff1a;准备阶段 开发基于SpringBoot和BootStrap的全栈论坛网站&#xff08;二&#xff09;&#xff1a;后端人员如何快速使用Boot…

开发基于SpringBoot和BootStrap的全栈论坛网站(七):完成回复和二级回复功能

论坛的搭建即将进入尾声&#xff0c;完成回复功能后只剩最后一个大功能&#xff1a;通知。然后就是对页面的精修和一些bug的修复&#xff0c;这些不会通过博客来展示&#xff0c;历史博客记录可以看我的实战项目专辑&#xff0c;在这里也不放链接了。 对一个论坛网站来说&…

开发基于SpringBoot和BootStrap的全栈论坛网站(八):完成回复通知的功能

当有人回复了你的问题时&#xff0c;肯定需要有通知能让我们看到&#xff0c;今天就来完成最后一个大功能--回复通知。具体的效果如下&#xff1a; 当有未读通知时&#xff0c;在导航栏上会显示未读通知的数量&#xff0c;点进去后能看到未读的信息&#xff0c;点击每条未读信息…

如何更改PHPCMS网站后台标题(title)

打开PHPCMS安装目录&#xff0c;选择phpcms 然后选择Languages目录&#xff0c;打开。 打开目录后&#xff0c;选择zh-cn目录&#xff0c;选择admin.lang.php用editPlus打开&#xff0c;将第九行后面的引号中的内容换成你想要改变的网站后台标题&#xff0c;保存文件 转载于:ht…

查准考证网站卡了整整一个小时进不去,被抢票支配的恐惧又来了

&#xff08;一&#xff09;概述 今天是国考出准考证的时间&#xff0c;刚好女朋友也要报名了这次考试&#xff0c;作为合格的男朋友当然是要在第一时间将准考证信息下载下来。结果到了半夜12点之后&#xff0c;整个官网一直处于无法连接、502、503、接口报错等各种问题。到了…

搜索引擎登录,网站分类目录登录地址

搜索引擎登录入口 google 如果你的网站是新发布的&#xff0c;或是访问量较低的网站在内容更新时&#xff0c;很有必要主动提交到Google&#xff0c;这样会使网站资料迅速更新倒Google搜索资料库&#xff0c;让用户能及时搜索到你的最新资料。 登录地址&#xff1a;http://www…

基于SpringBoot和BootStrap的全栈论坛网站(附上源码)

耗时大约三个星期不到的时间&#xff0c;把这个论坛项目基本上算是完成了&#xff0c;做这个项目最主要的目的是熟悉SpringBoot的使用&#xff0c;然后通过整个项目了解了BootStrap、Thymeleaf、editor.md等等工具的使用&#xff0c;今天就来做一下总结 &#xff08;一&#x…

一个有意思的网站

http://www.icpoline.com 上面看到一句话&#xff1a;傻的人之所以傻&#xff0c;那就在于他&#xff08;她&#xff09;不知道自己傻&#xff0c;如果他&#xff08;她&#xff09;知道自己傻&#xff0c;那他&#xff08;她&#xff09;就不傻。 所以&#xff0c;我敢断定…

网市场云建站 v4.8 增加私有模版库,开放 Mysql 配置、在线客服源码

开发四年只会写业务代码&#xff0c;分布式高并发都不会还做程序员&#xff1f; 网市场云建站系统&#xff0c;结合各种产品&#xff0c;将一个网站的服务器成本降低到0.1元&#xff01;打破传统建站的高成本&#xff0c;让价格不再是阻碍的门槛&#xff0c;让每个人都能有自…

高并发量网站解决方案

为什么80%的码农都做不了架构师&#xff1f;>>> 最近遇到高并发数据访问的问题&#xff0c;这篇博文讲的比较全面&#xff0c;值得一看。来源参考&#xff1a; http://blog.csdn.net/y_h_t/article/details/6322823 转载于:https://my.oschina.net/garyun/blog/602…

QQ登录网站接入功能实现--非官方文档搬运

背景 最近第一次使用QQ登录功能&#xff0c;期间遇到这种问题&#xff0c;在网上找了很多资料&#xff0c;大多都是官方的搬运&#xff0c;并没有真正的干料&#xff0c;可能是个人能力问题&#xff0c;遇到了各种麻烦&#xff0c;折腾了几天&#xff0c;最终弄好&#xff0c;…

从vancl看垂直商业网站的崛起

从vancl看垂直网站的崛起&#xff08;文&#xff1a;王英雄&#xff09;如果说2007年IT业内的几大事件&#xff0c;卖衬衣的卖火了&#xff0c;这肯定是2007年的重大事件之一。提起卖衬衣的&#xff0c;大家肯定会想到的是PPG&#xff0c;但我为什么不拿PPG做标题呐&#xff1f…

大型网站应用之海量数据和高并发解决方案总结一二

一、网站应用背景 开发一个网站的应用程序&#xff0c;当用户规模比较小的时候&#xff0c;使用简单的&#xff1a;一台应用服务器一台数据库服务器一台文件服务器&#xff0c;这样的话完全可以解决一部分问题&#xff0c;也可以通过堆硬件的方式来提高网站应用的访问性能&…

小白入门:大型网站技术架构负载均衡技术介绍及学习资源推荐

十年间&#xff0c;负载均衡的前沿技术层出不穷&#xff0c;令用户眼花缭乱。经常在技术网站、文档中出现的“四层负载均衡”、“七层负载均衡”字眼有什么含义?有什么区别?对客户网络有哪些不同的优化? 在大型的网站服务器集群中&#xff0c;负载均衡技术是必不可少的。使…

Flex SEO(Search engine optimization),让浏览器找到你的flash站点

Search engine optimistation 也就是让你的站点信息能被“搜索引擎”&#xff08;Google,baidu…&#xff09;搜索到。SEO总分两大类&#xff0c;white hats和black hats&#xff0c;简单讲black hats是一作弊的方法&#xff0c; 例如在meta标签中加一堆重复的关键词&#xff0…

unsharp mark 算法_Google SEO-BERT算法更新

一. BERT介绍BERT的全称为&#xff1a;Bidirectional Encoder Representations from Transformers&#xff0c;基于神经网络的自然语言处理预训练的技术。谷歌说BERT就像是一个超大的同义词系统。2019 年 10 月 25 日&#xff0c;Google 宣布 BERT 更新上线&#xff0c;正式成为…

有些网站打开一半空白_如何发一条空白的朋友圈

所谓空白的朋友圈就是一条看起来没有文字的朋友圈&#xff0c;因为发朋友圈的时候不输入文字是没法发送的。不可见字符是有文字内容的&#xff0c;只是人的肉眼看不见&#xff0c;所以相当于空白。不可见字符不可见字符就是零宽空格&#xff0c;见维基百科解释https://zh.wikip…

另类网站版式设计欣赏

另类网站版式设计欣赏 当你在创建一个新网站的时候&#xff0c;希望这些网站富有个性的版式设计能给你带来灵感。 Popmatik 这是Rob Leach设计制作的一个个人网站&#xff0c;这个网站用了一个瓶子的底图&#xff0c;网站的内容都在瓶子的这个包装纸上。 Digitalmash.com Digi…