代碼地址: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>