在上一篇博客中,我们讲解了注册页面的实现。在此基础上会跳转到登录页面,今天给大家带来的是使用 SpringBoot,MyBatis,Html,CSS,JavaScript,前后端交互实现一个登录功能。
目录
一、效果
二、源码
2.1 前端
2.2 后端
用户名和密码栏输入空或没有值时,提示错误。
在数据库中有以下信息,任意挑选一条信息进行登录操作。
输入用户 lisi,123 后登陆成功
跳转到个人列表。
前端登陆页面 html 代码,login.html:
登陆页面
登陆
用户名
密码
登陆页面的样式,login.css
.login-container {
width: 100%;
height: calc(100% - 50px);
display: flex;
justify-content: center;
align-items: center;
}
.login-dialog {
width: 400px;
height: 400px;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 10px;
}
.login-dialog h3 {
padding: 50px 0;
text-align: center;
}
.login-dialog .row {
height: 50px;
display: flex;
justify-content: center;
align-items: center;
}
.login-dialog .row span {
display: block;
width: 100px;
font-weight: 700;
}
.login-dialog .row input {
width: 200px;
height: 40px;
line-height: 40px;
font-size: 24px;
border-radius: 10px;
border: none;
outline: none;
text-indent: 10px;
}
.login-dialog button {
width: 300px;
height: 50px;
color: white;
background-color: green;
border: none;
border-radius: 10px;
}
.login-dialog button:active {
background-color: #666;
}
公共样式(注册或登录页面),common.css:
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
/* 设置整体页面高度 */
html, body {
height: 100%;
background-image: url(../img/cat2.png);
background-position: center center;
background-size: cover;
background-repeat: no-repeat;
}
/* 上方导航栏 */
.nav {
width: 100%;
height: 50px;
background-color: rgba(51, 51, 51, 0.4);
color: #fff;
display: flex;
justify-content: left;
align-items: center;
}
/* 导航栏中的图标 */
.nav img {
width: 40px;
height: 40px;
margin-left: 30px;
margin-right: 10px;
border-radius: 50%;
}
/* 导航栏中的占位器 */
.nav .spacer {
width: 70%;
}
/* 导航栏中的按钮 */
.nav a {
color: #fff;
text-decoration: none;
padding: 0 10px;
}
/* 页面内容容器, 版心 */
.container {
/* 使用 calc 计算高度 */
height: calc(100% - 50px);
/* 设置版心宽度 */
width: 1000px;
/* 水平居中 */
margin: 0 auto;
/* 使用弹性布局 */
display: flex;
justify-content: space-between;
align-items: center;
}
/* 左侧部分, 用来放置用户信息 */
.container-left {
height: 100%;
width: 200px;
}
/* 右侧部分, 用来放置正文 */
.container-right {
height: 100%;
/* 和左侧部分中间留出 5px 间隙 */
width: 795px;
/* 如果内容溢出就自动加上滚动条 */
overflow: auto;
background-color: rgba(255, 255, 255, 0.8);
border-radius: 10px;
}
/* 展示用户信息的卡片 */
.card {
background-color: rgba(255, 255, 255, 0.8);
border-radius: 10px;
padding: 30px;
}
/* 用户头像 */
.card img {
width: 140px;
height: 140px;
border-radius: 50%;
}
/* 用户名 */
.card h3 {
text-align: center;
padding: 10px;
}
/* 用户 github 链接 */
.card a {
display: block;
text-align: center;
color: #999;
text-decoration: none;
padding: 10px;
}
/* 展示文章数目的面板 */
.card .counter {
padding: 5px;
display: flex;
justify-content: space-around;
}
统一返回格式,ResultAjax 类:
/**
* 统一的返回格式
*/
@Data
public class ResultAjax {
private int code;
private String msg;
private Object data;
// 成功
public static ResultAjax success(Object data) {
ResultAjax resultAjax = new ResultAjax();
resultAjax.setCode(200);
resultAjax.setMsg("");
resultAjax.setData(data);
return resultAjax;
}
public static ResultAjax success(int code, String msg, Object data) {
ResultAjax resultAjax = new ResultAjax();
resultAjax.setCode(code);
resultAjax.setMsg(msg);
resultAjax.setData(data);
return resultAjax;
}
// 失败
public static ResultAjax fail(int code, String msg) {
ResultAjax resultAjax = new ResultAjax();
resultAjax.setCode(code);
resultAjax.setMsg(msg);
return resultAjax;
}
public static ResultAjax fail(int code, String msg, Object data) {
ResultAjax resultAjax = new ResultAjax();
resultAjax.setCode(code);
resultAjax.setMsg(msg);
resultAjax.setData(data);
return resultAjax;
}
}
UserMapper 接口:
@Mapper
public interface UserMapper {
//登录功能
@Select("select * from userinfo where username=#{username}")
Userinfo getUserinfoByName(@Param("username") String username);
}
UserService 类:
@Service
public class UserService {
//注册接口注入进来
@Autowired
private UserMapper userMapper;
//登录功能
public Userinfo getUserByName(String username) {
return userMapper.getUserinfoByName(username);
}
}
UserControler 类:
@RestController
@RequestMapping("/user")
public class UserController {
@Autowired
private UserService userService;
/**
* 登录接口
* @param userinfoVO
* @return
*/
@RequestMapping("/login")
public ResultAjax login(UserinfoVO userinfoVO, HttpServletRequest request) {
// 1.参数校验
if (userinfoVO == null || !StringUtils.hasLength(userinfoVO.getUsername())
|| !StringUtils.hasLength(userinfoVO.getPassword())) {
// 非法登录
return ResultAjax.fail(-1,"非法登录!");
}
// 2.根据用户名查询对象,判断用户名是否错误
Userinfo userinfo = userService.getUserByName(userinfoVO.getUsername());
if (userinfo == null && userinfo.getId() == 0) {
return ResultAjax.fail(-2,"账号或密码错误!");
}
// 3.使用对象中的密码和输入的密码进行对比,判断密码是否错误
if (!userinfoVO.getPassword().equals(userinfo.getPassword())) {
return ResultAjax.fail(-2,"账号或密码错误!");
}
// 4.成功后将对象存储到 session 中
HttpSession session = request.getSession();
session.setAttribute(ApplicationVariable.SESSION_USERINFO_KEY,userinfo);
// 5.结果返回给用户
return ResultAjax.success(1);
}
}
上述为整个登录功能的核心代码,其中需要注意的是前端需自行映入 jQuery 依赖、在 application.properties 文件中连接数据库、创建对应的数据库。连接数据库,数据库的创建代码在上篇博客中已讲解。
本篇博客到这里就结束了,感谢各位的观看。