SpringSecirity(四)——用户退出

因为JWT是无状态的,去中心化的,在服务器端无法清除,服务器一旦进行颁发,就只能等待自动过期 才会失效,所以需要redis配合才能完成登录状态的记录。

实现思路: 登录后在redis中添加一个白名单,把认证成功的用户的JWT添加到redis中。

在退出的时候,服务清空springsecurit保存认证通过的Authentication对象,其次在redis中进行删除。

(1)改造登录接口

保存至redis时,加上截止时间。

(2)退出后台代码实现

java 复制代码
    /**
     * 用户退出
     */
    @PostMapping("/logout")
    public R logout(HttpServletRequest request, HttpServletResponse response) {
        //获取token
        String token = request.getParameter("Authorization");
        //如果没有从头部获取token,那么从参数里面获取
        if (ObjectUtils.isEmpty(token)) {
            token = request.getHeader("Authorization");
        }
        //获取用户相关信息
        Authentication authentication
                = SecurityContextHolder.getContext().getAuthentication();
        if (authentication != null) {
            //清空用户信息
            new SecurityContextLogoutHandler().logout(request, response,authentication);
            //清空redis里面的token
            String key = "token_" + token;
            stringRedisTemplate.delete(key);
        }
        return R.ok().message("用户退出成功");
    }
相关推荐
逛逛GitHub40 分钟前
这个 GitHub 项目牛逼!在手机上用 Claude Code 或 Codex。
github
stark张宇2 小时前
Git 与 GitHub 协同工作流:从0到1搭建版本控制体系
git·gitlab·github
爱吃生蚝的于勒2 小时前
【Linux】零基础学会Linux之权限
linux·运维·服务器·数据结构·git·算法·github
数字冰雹3 小时前
图观 流渲染打包服务器
服务器·前端·github·数据可视化
白鲸开源3 小时前
3.1.8<3.2.0<3.3.1,Apache DolphinScheduler集群升级避坑指南
java·开源·github
计算机小手4 小时前
推荐一个 GitHub 开源项目信息卡片生成工具,支持Docker快速部署和API调用
经验分享·docker·github·开源软件
ssshooter4 小时前
GitHub 删除无法访问的 mention
github
绝无仅有7 小时前
面试真实经历某节跳动大厂Java和算法问答以及答案总结(一)
后端·面试·github
绝无仅有7 小时前
某大厂跳动面试:计算机网络相关问题解析与总结
后端·面试·github
Cosolar14 小时前
FunASR 前端语音识别代码解析
前端·面试·github