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("用户退出成功");
    }
相关推荐
用户4099322502123 小时前
如何让你的FastAPI Celery Worker在压力下优雅起舞?
后端·github·trae
小前端学徒6 小时前
github actions (或本地) 使用RSA登录云服务器
github
SelectDB6 小时前
Doris MCP Server 0.5.1 版本发布
github·apache·mcp
程序媛Dev6 小时前
Kubekey 安装 KubeSphere 劝退?试试 Sealos 这个“一行命令”平替方案
开源·github
掘金安东尼7 小时前
独立开发/自由职业/远程工作:这年头不上班也能过挺好!!
前端·面试·github
寻月隐君19 小时前
Rust 实战:从零构建一个多线程 Web 服务器
后端·rust·github
草梅友仁19 小时前
草梅 Auth 1.3.0 发布与 GitHub 动态 | 2025 年第 32 周草梅周报
开源·github·ai编程
北'辰21 小时前
DeepSeek智能考试系统智能体
前端·后端·架构·开源·github·deepseek
我是哪吒1 天前
分布式微服务系统架构第164集:架构懂了就来了解数据库存储扩展千亿读写
后端·面试·github