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("用户退出成功");
    }
相关推荐
Hommy882 小时前
【开源剪映小助手】添加特效接口(Add Effects)
开源·github·剪映小助手·视频剪辑自动化
爱吃苹果的梨叔4 小时前
2026年KVM over IP采购指南:BIOS级接管、并发和审计怎么验收
ide·python·tcp/ip·github
OsDepK4 小时前
获取免费API讯飞星辰maas平台
ide·github
OpenIM4 小时前
mage跨平台构建说明
开源·github·信息与通信
徐小夕7 小时前
我们放弃了单Agent方案:HiCAD 3.0 用 Harness 做多Agent编排,把3D建模的准确率提升了30%
前端·算法·github
Java面试题总结8 小时前
MarkItDown 再次登顶GitHub榜
开发语言·c#·github
佛系豪豪吖8 小时前
AtomCode 部署流程与使用经验
笔记·chatgpt·github·ai编程·gitcode
宝桥南山9 小时前
GitHub Copilot - 尝试使用一下Azure Devops MCP server
microsoft·微软·github·aigc·copilot·devops
MicrosoftReactor9 小时前
技术速递|提升 GitHub Agentic Workflows 的 Token 使用效率
ai·github·copilot·智能体
DogDaoDao9 小时前
【GitHub】last30days-skill 深度技术解析
深度学习·程序员·大模型·github·ai agent·agent skill