springboot開源框架,Spring boot開源項目之個人博客(11)—登錄功能實現

 2023-11-09 阅读 26 评论 0

摘要:Spring boot開源項目之個人博客(11)—登錄功能實現 這部分就把一下重要的點記錄一下。 前端表單非空驗證 <script>$('.ui.form').form({fields:{username:{identifier: 'username',rules:[{type: 'empty',prompt : '請輸入用

Spring boot開源項目之個人博客(11)—登錄功能實現

這部分就把一下重要的點記錄一下。

  • 前端表單非空驗證
<script>$('.ui.form').form({fields:{username:{identifier: 'username',rules:[{type: 'empty',prompt : '請輸入用戶名'}]},password:{identifier: 'password',rules:[{type: 'empty',prompt : '請輸入密碼'}]}}});
</script>

再用一個div放錯誤信息

<!--非空驗證信息-->
<div class="ui error message"></div>
<!--用戶名密碼錯誤信息,在message非空時才顯示-->
<div class="ui mini negative message" th:unless="${#strings.isEmpty(message)}" th:text="${message}"></div>

效果是這樣的

在這里插入圖片描述

  • controller層一些細節
@PostMapping("/login")public String login(@RequestParam String username,@RequestParam String password,HttpSession session,RedirectAttributes attributes){User user = userService.checkUser(username, password);if (user != null){//密碼不能放到session里,需要提前把密碼清空user.setPassword(null);session.setAttribute("user", user);return "/admin/index";} else {//這里的attributes是RedirectAttributes下的,不是的話message傳不回重定向后的頁面 attributes.addFlashAttribute("message", "用戶名密碼錯誤");//這里要注意用"redirect:/admin",不能直接return "/admin";包括下面注銷那里也是一樣return "redirect:/admin";}}@GetMapping("/logout")public String logout(HttpSession session){session.removeAttribute("user");return "redirect:/admin";}
  • MD5加密登錄

新建一個util包,再新建一個MD5Utils類

public class MD5Utils {/*** MD5加密類** @param str 要加密的字符串* @return 加密后的字符串*/public static String code(String str) {try {MessageDigest md = MessageDigest.getInstance("MD5");md.update(str.getBytes());byte[] byteDigest = md.digest();int i;StringBuffer buf = new StringBuffer("");for (int offset = 0; offset < byteDigest.length; offset++) {i = byteDigest[offset];if (i < 0)i += 256;if (i < 16)buf.append("0");buf.append(Integer.toHexString(i));}//32位加密return buf.toString();// 16位的加密//return buf.toString().substring(8, 24);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}}public static void main(String[] args) {System.out.println(code("111111"));}
}

改一下數據庫,把密碼改成加密后的密碼,然后在services層稍加修改

public User checkUser(String username, String password) {User user = userRepository.findByUserNameAndPassword(username, MD5Utils.code(password));return user;}
  • 設置登錄攔截器

新建一個interceptor包,在包里新建LoginInterceptor類,令其繼承HandlerInterceptorAdapter類

public class LoginInterceptor extends HandlerInterceptorAdapter {@Overridepublic boolean preHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception {if (request.getSession().getAttribute("user") == null){response.sendRedirect("/admin");return false;}return true;}
}

重寫里面的preHandle方法,通過查session里是否有user判斷是否為登錄狀態,若未登錄則重定向到登錄頁面。另一方面還要配置攔截器攔截的地址,新建一個WebConfig類,并加上@Configuration表示這個類是一個配置類。

@Configuration
public class WebConfig implements WebMvcConfigurer {@Overridepublic void addInterceptors(InterceptorRegistry registry) {registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/admin/**").excludePathPatterns("/admin").excludePathPatterns("/admin/login");}
}

使之實現WebMvcConfigurer接口,重寫里面的addInterceptors方法,把剛才做好的攔截器加入進去,在配置好攔截的路徑。至此,登錄功能就全部實現了。

版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。

原文链接:https://808629.com/170689.html

发表评论:

本站为非赢利网站,部分文章来源或改编自互联网及其他公众平台,主要目的在于分享信息,版权归原作者所有,内容仅供读者参考,如有侵权请联系我们删除!

Copyright © 2022 86后生记录生活 Inc. 保留所有权利。

底部版权信息