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("用户退出成功");
    }
相关推荐
DogDaoDao13 小时前
ShellGPT:当大语言模型遇见命令行——深度解析一个 CLI AI 生产力工具的设计与实现
人工智能·语言模型·自然语言处理·github·大语言模型·shellgpt·终端命令行
uhakadotcom15 小时前
Python 中,`None` 不等于 `False`导致的问题
后端·面试·github
小弥儿18 小时前
GitHub今日热榜 | 2026-07-05:阿里巴巴浏览器Agent上榜
学习·开源·github
uhakadotcom19 小时前
什么是 “无界限的列表积累” 问题
后端·面试·github
AC赳赳老秦1 天前
防火墙规则批量配置实战:OpenClaw 自动生成模板、批量下发与合规性校验全解析
java·开发语言·人工智能·python·github·php·openclaw
FPGA验证小袁2 天前
EMIF BFM设计与实现:把复杂时序装进“一键读写”的黑盒
github
汤姆yu2 天前
macOS系统下Aider完整安装、配置与实战使用教程
大数据·人工智能·算法·macos·github·copilot
小弥儿2 天前
GitHub今日热榜 | 2026-07-04
学习·开源·github
CoderJia程序员甲2 天前
GitHub 热榜项目 - 周榜(2026-07-04)
ai·大模型·llm·github
REDcker2 天前
GitHub SSH 连接失败排障实录
运维·ssh·github