1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Spring boot开源项目之个人博客(11)—登录功能实现

Spring boot开源项目之个人博客(11)—登录功能实现

时间:2023-09-01 15:03:36

相关推荐

Spring boot开源项目之个人博客(11)—登录功能实现

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表示这个类是一个配置类。

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

使之实现WebMvcConfigurer接口,重写里面的addInterceptors方法,把刚才做好的拦截器加入进去,在配置好拦截的路径。至此,登录功能就全部实现了。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。