简单的登录注册模块的实现(一)
代码地址:https://github.com/Aprilfi/Cube.git
一、用到的框架
1)SpringBoot
2)Spring Data JPA
3)thymeleaf
4)jq,js,css等
二、在开始实现功能前,首先要做的自然是设计数据库表,这里由于只做登录注册,所以只做了两张表,表结构如下:
id |
用户id |
userName |
用户昵称 |
realName |
用户真实姓名 |
sex |
用户性别 |
old |
用户年龄 |
idCard |
身份证 |
ip |
ip |
status |
封禁状态 |
loginTime |
登录时间 |
registerTime |
注册时间 |
|
用户邮箱 |
phoneNumber |
用户手机号码 |
passWord |
密码 |
salt |
随即盐 |
要值得注意的是,在创建表字段时,字段的数据类型要尽可能要适合场景,如账号的封禁状态,用char(1)就够了。
三、代码实现
后台:
import cn.lovepi.config.MainContext; import cn.lovepi.controller.Handler; import cn.lovepi.pojo.user.User; import cn.lovepi.service.UserService; import cn.lovepi.utils.MD5Util; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @author Wuhl * @date 2019-05-08 16:17 * @function 登录、注册 */ @Controller @RequestMapping("/user") public class UserController extends Handler { @Autowired private UserService userService; @RequestMapping("/login.htm") public String login() { super.log.error(this.toString()); return "user/login.html"; } @RequestMapping("/register.htm") public String register() { return "user/register.html"; } /** * @function 注册验证,验证码发送 * @param user * @param request * @param map * @return login */ @RequestMapping("/register") public String registerSubmit(User user, HttpServletRequest request, ModelMap map) { user.setSalt(MD5Util.getSaltMD5(user.getPassWord())); if(isEmail(user.getEmail())) { //发送邮箱验证码 }else{ //发送手机验证码 } user.setIp(request.getRemoteAddr()); user.setRegisterTime(super.getTime()); user.setStatus(MainContext.USER_STATUS); super.setUser(request, user); userService.save(user); map.addAttribute("userName", user.getUserName()); return "user/login.html"; } /** * @function 登录验证 * @param user * @param map * @return login */ @RequestMapping("/login") public String loginSubmit(User user, ModelMap map) { List<User> users = userService.findByUserName(user.getUserName()); if(users.size() < 1) { map.addAttribute("exist", true); return "/user/login.html"; }else if(!MD5Util.getSaltverifyMD5(user.getPassWord(), users.get(0).getSalt())) { map.addAttribute("pasError", true); return "user/login.html"; } //更新用户最后登录时间 users.get(0).setLoginTime(super.getTime()); userService.save(users.get(0)); map.addAttribute("user", users.get(0)); return "index.html"; } @RequestMapping("/isUserName") @ResponseBody public String isUserName(String userName) { List<User> users = userService.findByUserName(userName); if(users.size() > 0) return "0"; return "1"; } }
前端页面:
login.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.w3.org/1999/xhtml"> <head> <meta charset="UTF-8"> <title>Title</title> <link href="/sidebar/style.css"/> <link rel="stylesheet" type="text/css" href="/dist/css/barrager.css"> <style> body input{ height: 25px; } header { padding-top: 10%; width: 100%; text-align: center; margin-bottom: 5%; } #re_form { width: 40%; height: auto; margin: 0 auto; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; border-radius: 10px; padding: 0 100px; } .form_input { height: 70px; } .form_input input { width: 100%; padding-left: 10px; } .submit { float: right;p margin-right: 5%; margin-bottom: 50px; border-radius: 5px; padding: 5px; width: 70px; height: 35px; border: 1px solid #6b6b6b; } .danger { color: red; text-align: center; } #skip_register { font-size: 25px; color: #1b1e21; position: fixed; right: 0; top: 0; opacity: 0.6; background-color: #9e9e9e; padding: 8px; } </style> </head> <body> <header> <h1>L o g i n</h1> </header> <div id="main"> <form action="/user/login" method="post" id="login_form"> <table id="re_form"> <tr class="form_input"> <td>昵称:</td> <td><input type="text" name="userName" id="userName" th:value="${userName}"/></td> </tr> <tr class="form_input"> <td>密码:</td> <td><input type="password" name="passWord" id="passWord"/></td> </tr> <tr> <td colspan="2"> <input type="submit" value="login" class="submit"/> </td> </tr> </table> <p class="danger" th:if="${exist}">用户不存在</p> <p class="danger" th:if="${pasError}">用户名与密码不匹配</p> </form> </div> <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.js"></script> <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script> <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/localization/messages_zh.js"></script> <script type="text/javascript" src="/dist/js/jquery.barrager.min.js"></script> <script> // 在键盘按下并释放及提交后验证提交表单 $("#login_form").validate({ rules: { userName: { required: true }, passWord: { required: true } } }); //注册页面跳转 $('#skip_register').click(function () { location.replace("/user/register.htm") }); var item={ img:'static/heisenberg.png', //图片 info:'test', //文字 href:'wwe.baidu.com', //链接 close:true, //显示关闭按钮 speed:6, //延迟,单位秒,默认6 color:'#fff', //颜色,默认白色 old_ie_color:'#000000', //ie低版兼容色,不能与网页背景相同,默认黑色 } var itemJson = []; var index = 0; var length = itemJson.length - 1; console.log(length) function consoleLog(){ $('body').barrager(itemJson[index]); if (index < length) index ++; else if (index == length) index = 0; console.log(index) } var ref = setInterval(function(){ consoleLog(index); },2000); </script> </body> </html>
register.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <script src="/js/jquery/jquery-1.10.2.js"></script> <title>Title</title> <style> body input{ height: 25px; } header { padding-top: 80px; width: 100%; text-align: center; margin-bottom: 5%; } #re_form { width: 40%; height: auto; margin: 0 auto; border-bottom: 1px solid black; border-left: 1px solid black; border-right: 1px solid black; border-radius: 10px; padding: 0 100px; } .form_input { height: 70px; } .form_input input { width: 100%; padding-left: 10px; } .submit { float: right; margin-right: 5%; margin-bottom: 50px; border-radius: 5px; padding: 5px; width: 70px; height: 35px; border: 1px solid #6b6b6b; } #skip_login { font-size: 25px; color: #1b1e21; position: fixed; right: 0; top: 0; opacity: 0.6; background-color: #9e9e9e; padding: 8px; } </style> </head> <body> <form action="/user/register" method="post" id="register_form"> <table id="re_form"> <tr class="form_input"> <td>昵称:</td> <td><input type="text" name="userName" class="username"/></td><span style="color: red;" id="username">*</span> </tr> <tr class="form_input"> <td>邮箱/手机:</td> <td><input type="text" name="email" placeholder="邮箱地址或手机号码"/></td> </tr> <tr class="form_input"> <td>密码:</td> <td><input type="password" name="passWord"/></td> </tr> <tr class="form_input"> <td>确认密码:</td> <td><input type="password" name="readPas" id="realPassword"/></td> </tr> <tr> <td colspan="2"> <input type="submit" value="register" class="submit"/> </td> </tr> </table> </form> <div id="skip_login"> L o g i n </div> <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/lib/jquery.js"></script> <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/jquery.validate.min.js"></script> <script src="http://static.runoob.com/assets/jquery-validation-1.14.0/dist/localization/messages_zh.js"></script> <script> $('.username').bind('input propertychange',function () { $.ajax({ type: 'post', data:{userName:$('.username').val()}, dataType: 'text', url: "/user/isUserName", success: function (data) { $('#username').show(); if (data == '0') $('#username').css({'color':'red'}) else $('#username').css({'color':'green'}) }, error: function (data) { } }); }); //注册页面跳转 $('#skip_login').click(function () { location.replace("/user/login.htm") }); // 在键盘按下并释放及提交后验证提交表单 $("#register_form").validate({ rules: { userName: { required: true }, email: { required:true }, passWord: { required: true }, readPas: { required: true } } }); </script> </body> </html>