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("用户退出成功");
    }
相关推荐
数字化顾问7 小时前
GitHub热榜项目 - 日榜之应用场景与未来发展趋势
github
CoderJia程序员甲9 小时前
GitHub 热榜项目 - 日榜(2025-09-13)
ai·开源·大模型·github·ai教程
逛逛GitHub11 小时前
1 个神级智能问数工具,刚开源就 1500 Star 了。
sql·github
梦想CAD控件12 小时前
(在线CAD平台)网页集成CAD SDK的方法
前端·javascript·github
杨杨杨大侠14 小时前
Atlas Mapper 教程系列 (4/10):高级映射技巧与类型转换
java·开源·github
杨杨杨大侠14 小时前
Atlas Mapper 教程系列 (3/10):核心注解详解与基础映射
java·开源·github
杨杨杨大侠15 小时前
Atlas Log 0.2.0 版本
java·github·apache log4j
绝无仅有16 小时前
大厂Redis高级面试题与答案
后端·面试·github
绝无仅有16 小时前
面试问题之导致 SQL 查询慢的原因及优化建议
后端·面试·github
超人不会飛18 小时前
Vue markdown组件 | 流式 | 大模型应用
前端·javascript·github