如何实现自动登录的功能

如何实现自动登录的功能在软件使用上 用户体验是一个重要的考虑因素 所以为了提高用户的体验 很多的应用系统中都会有自动登录功能 如下所示的自动登录的图 自动登录其实是在用户第一次成功登录后 应用系统将用户的登录状态持久化 等用户下次再访问时实现自动登录 这样就不

大家好,欢迎来到IT知识分享网。

在软件使用上,用户体验是一个重要的考虑因素,所以为了提高用户的体验,很多的应用系统中都会有自动登录功能,如下所示的自动登录的图:

如何实现自动登录的功能

自动登录其实是在用户第一次成功登录后,应用系统将用户的登录状态持久化,等用户下次再访问时实现自动登录,这样就不需用户再次输入用户名和密码。那么自动登录如何实现呢,下面介绍通过Cookie+Token的方式实现自动登录的功能。

1、Cookie+Token实现方案

用户勾选“自动登录”选项后进行登录时,服务端验证用户信息通过之后生成一个Token,然后服务端将Token写到Cookie上并存留一段时间,用户下次重新打开浏览器,浏览器会自动登录,如下自动登录的流程图:

如何实现自动登录的功能

(1)当用户第一次登录系统的时候,用户输入用户名和密码进行登录,验证账号与密码通过之后,服务端生成Token,如下图所示:

如何实现自动登录的功能

服务端将生成的Token缓存一份到Redis上,然后将Token和用户信息更新到数据库中;最后服务端将Token存入用户的Cookie中,以便后续请求使用。

(2)用户下次再访问服务的时候,请求中携带有Token的Cookie访问服务端,服务端要从请求的Cookie中获取Token的信息,流程图如下所示:

如何实现自动登录的功能

Redis中与数据库中都验证Token通过之后,系统直接将用户设置成登录状态。至此就完成了用户的自动登录。

2、方案实现的核心代码

(1)用户的登录的核心代码

  @PostMapping("/login") public String login(@RequestBody User loginUser, HttpServletResponse response) { User user = userService.queryUserByName(loginUser.getUsername()); // 用户验证通过 if (user != null && user.getPassword().equals(loginUser.getPassword())) { //生成token 并保存用户的token String token = JWTUtils.generateToken(user); user.setToken(token); userService.save(user); //保存到redis中 stringRedisTemplate.opsForValue().set("login_token_" + token, user.getId().toString(), 7 * 24 * 60 * 60, TimeUnit.SECONDS); //设置cookie Cookie cookie = new Cookie("token", token); cookie.setPath("/"); //Cookie有效的时间存储为一周 cookie.setMaxAge(7 * 24 * 60 * 60); response.addCookie(cookie); return "登录成功"; } else { return "用户名或密码错误"; } }

(2)用户自动登录的核心代码实现

@GetMapping("/autoLogin") public String autoLogin(HttpServletRequest request) { Cookie[] cookies = request.getCookies(); //无cookie if (Objects.isNull(cookies)) { return "自动登录失败"; } //解析cookie中的token for (Cookie cookie : cookies) { if ("token".equals(cookie.getName())) { String token = cookie.getValue(); //判断redis中是否存在token的记录信息,如果不存在就返回 if(stringRedisTemplate.opsForValue().get("login_token_" + token) == null){ return "自动登录失败"; } //解析token String userIdStr = JWTUtils.parseToken(token); //通过token获取用户的信息 User user = userService.queryByToken(token); if (Objects.nonNull(user) && user.getId().toString().equals(userIdStr)) { return "自动登录成功了"; } else { return "自动登录失败"; } } } return "自动登录失败"; }

总结:

通过使用Token和Cookie的方式已实现了用户自动登录功能。原理是用户第一次登录成功之后将Token保存到Cookie中,然后用户再次登录时检测Token是否有效,从而实现自动登录的功能

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/178335.html

(0)
上一篇 2025-05-11 11:33
下一篇 2025-05-11 12:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信