LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

如何实现Web网站的用户自动登录功能

admin
2025年1月22日 12:12 本文热度 128

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

    自动登录其实是在用户第一次成功登录后,应用系统将用户的登录状态持久化,等用户下次再访问时实现自动登录,这样就不需用户再次输入用户名和密码。那么自动登录如何实现呢,下面介绍通过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是否有效,从而实现自动登录的功能。


该文章在 2025/1/23 10:47:00 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved