日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

Spring Boot开发登录、退出功能

發(fā)布時間:2024/3/13 javascript 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Spring Boot开发登录、退出功能 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1. 功能描述

① 訪問登錄頁面:點擊頂部區(qū)域內(nèi)的鏈接,打開登錄頁面。
② 登錄:驗證賬號、密碼、驗證碼;成功時,生成登錄憑證,發(fā)送給客戶端;失敗時,跳轉(zhuǎn)回登錄頁。
③ 退出:將登錄憑證修改為失效狀態(tài);跳轉(zhuǎn)至網(wǎng)站首頁。
④ 忘記密碼: 點擊登錄頁面上的“忘記密碼”鏈接,打開忘記密碼頁面;在表單中輸入注冊的郵箱,點擊獲取驗證碼按鈕,服務(wù)器為該郵箱發(fā)送一份驗證碼;在表單中填寫收到的驗證碼及新密碼,點擊重置密碼,服務(wù)器對密碼進(jìn)行修改。

2. 登錄、退出

LoginController.java

@PostMapping("/login") public String login(String username, String password, String code, boolean rememberme,Model model, HttpSession session, HttpServletResponse response) {// 檢查驗證碼String kaptcha = (String) session.getAttribute("kaptcha");if (StringUtils.isBlank(kaptcha) || StringUtils.isBlank(code) || !kaptcha.equalsIgnoreCase(code)) {model.addAttribute("codeMsg", "驗證碼不正確!");return "/site/login";}// 檢查賬號,密碼int expiredSeconds = rememberme ? REMEMBER_EXPIRED_SECONDS : DEFAULT_EXPIRED_SECONDS;Map<String, Object> map = userService.login(username, password, expiredSeconds);if (map.containsKey("ticket")) {Cookie cookie = new Cookie("ticket", map.get("ticket").toString());cookie.setPath(contextPath);cookie.setMaxAge(expiredSeconds);response.addCookie(cookie);return "redirect:/index";} else {model.addAttribute("usernameMsg", map.get("usernameMsg"));model.addAttribute("passwordMsg", map.get("passwordMsg"));return "/site/login";} }@GetMapping("/logout") public String logout(@CookieValue("ticket") String ticket) {userService.logout(ticket);return "redirect:/login"; }

UserService.java

public Map<String, Object> login(String username, String password, int expiredSeconds) {Map<String, Object> map = new HashMap<>();// 空值處理if (StringUtils.isBlank(username)) {map.put("usernameMsg", "賬號不能為空!");return map;}if (StringUtils.isBlank(password)) {map.put("passwordMsg", "密碼不能為空!");return map;}// 驗證賬號User user = userMapper.selectByName(username);if (user == null) {map.put("usernameMsg", "該賬號不存在!");return map;}// 驗證狀態(tài)if (user.getStatus() == 0) {map.put("usernameMsg", "該賬號未激活!");return map;}// 驗證密碼password = CommunityUtil.md5(password + user.getSalt());if (!user.getPassword().equals(password)) {map.put("passwordMsg", "密碼不正確!");return map;}// 生成登錄憑證LoginTicket loginTicket = new LoginTicket();loginTicket.setUserId(user.getId());loginTicket.setTicket(CommunityUtil.generateUUID());loginTicket.setStatus(0);loginTicket.setExpired(new Date(System.currentTimeMillis() + expiredSeconds * 1000));loginTicketMapper.insertLoginTicket(loginTicket);map.put("ticket", loginTicket.getTicket());return map; }public void logout(String ticket) {loginTicketMapper.updateStatus(ticket, 1); }public LoginTicket findLoginTicket(String ticket) {return loginTicketMapper.selectByTicket(ticket); }public int updateHeader(int userId, String headerUrl) {return userMapper.updateHeader(userId, headerUrl); }

login.html

<!-- 內(nèi)容 --> <div class="main"><div class="container pl-5 pr-5 pt-3 pb-3 mt-3 mb-3"><h3 class="text-center text-info border-bottom pb-3">&nbsp;&nbsp;</h3><form class="mt-5" method="post" th:action="@{/login}"><div class="form-group row"><label for="username" class="col-sm-2 col-form-label text-right">賬號:</label><div class="col-sm-10"><input type="text" th:class="|form-control ${usernameMsg!=null?'is-invalid':''}|"th:value="${param.username}"id="username" name="username" placeholder="請輸入您的賬號!" required><div class="invalid-feedback" th:text="${usernameMsg}">該賬號不存在!</div></div></div><div class="form-group row mt-4"><label for="password" class="col-sm-2 col-form-label text-right">密碼:</label><div class="col-sm-10"><input type="password" th:class="|form-control ${passwordMsg!=null?'is-invalid':''}|"th:value="${param.password}"id="password" name="password" placeholder="請輸入您的密碼!" required><div class="invalid-feedback" th:text="${passwordMsg}">密碼長度不能小于8!</div> </div></div><div class="form-group row mt-4"><label for="verifycode" class="col-sm-2 col-form-label text-right">驗證碼:</label><div class="col-sm-6"><input type="text" th:class="|form-control ${codeMsg!=null?'is-invalid':''}|"id="verifycode" name="code" placeholder="請輸入驗證碼!"><div class="invalid-feedback">驗證碼不正確!</div></div><div class="col-sm-4"><img th:src="@{/kaptcha}" id="kaptcha" style="width:100px;height:40px;" class="mr-2"/><a href="javascript:refresh_kaptcha();" class="font-size-12 align-bottom">刷新驗證碼</a></div></div> <div class="form-group row mt-4"><div class="col-sm-2"></div><div class="col-sm-10"><input type="checkbox" id="remember-me" name="rememberme"th:checked="${param.rememberme}"><label class="form-check-label" for="remember-me">記住我</label><a href="forget.html" class="text-danger float-right">忘記密碼?</a></div></div> <div class="form-group row mt-4"><div class="col-sm-2"></div><div class="col-sm-10 text-center"><button type="submit" class="btn btn-info text-white form-control">立即登錄</button></div></div></form> </div> </div>

3. 忘記密碼

LoginController.java

@GetMapping("/forget/code") @ResponseBody public String getForgetCode(String email, HttpSession session, Model model) {if (StringUtils.isBlank(email)) {return CommunityUtil.getJSONString(1, "郵箱不能為空!");}Map<String, Object> map = userService.verifyEmail(email);if(map.containsKey("user")) {//判斷是否有郵箱的注冊信息// 保存驗證碼session.setAttribute("verifyCode", map.get("code"));return CommunityUtil.getJSONString(0);} else {return CommunityUtil.getJSONString(1, "查詢不到該郵箱注冊信息");} }@PostMapping("/forget/password") public String resetPassword(String email, String verifyCode, String password, Model model, HttpSession session) {String code = (String) session.getAttribute("verifyCode");if (StringUtils.isBlank(verifyCode) || StringUtils.isBlank(code) || !code.equalsIgnoreCase(verifyCode)) {model.addAttribute("codeMsg", "驗證碼錯誤!");return "/site/forget";}Map<String, Object> map = userService.resetPassword(email, password);if (map.containsKey("user")) {model.addAttribute("msg","修改密碼成功,請重新登錄");model.addAttribute("target","/login");return "/site/operate-result";} else {model.addAttribute("emailMsg", map.get("emailMsg"));model.addAttribute("passwordMsg", map.get("passwordMsg"));return "/site/forget";} }

UserService.java

//重置密碼前校驗郵箱 public Map<String, Object> verifyEmail(String email) {Map<String,Object> map = new HashMap<>();// 空值處理if (StringUtils.isBlank(email)) {//不需要寫emailMsg,直接返回空的就行return map;}User user = userMapper.selectByEmail(email);if (user == null) {//不需要寫emailMsg,直接返回空的就行return map;} else {//如果能查到這個郵箱就發(fā)送郵件Context context = new Context();context.setVariable("email", email);String code = CommunityUtil.generateUUID().substring(0, 4);context.setVariable("verifyCode", code);String content = templateEngine.process("/mail/forget", context);mailClient.sendMail(email, "找回密碼", content);map.put("code", code);}map.put("user", user);return map; }// 重置密碼 public Map<String, Object> resetPassword(String email, String password) {Map<String, Object> map = new HashMap<>();// 空值處理if (StringUtils.isBlank(email)) {map.put("emailMsg", "郵箱不能為空!");return map;}if (StringUtils.isBlank(password)) {map.put("passwordMsg", "密碼不能為空!");return map;}// 驗證郵箱User user = userMapper.selectByEmail(email);if (user == null) {map.put("emailMsg", "該郵箱尚未注冊!");return map;}// 重置密碼password = CommunityUtil.md5(password + user.getSalt());userMapper.updatePassword(user.getId(), password);map.put("user", user);return map; }

總結(jié)

以上是生活随笔為你收集整理的Spring Boot开发登录、退出功能的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。