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("用户退出成功");
    }
相关推荐
lkbhua莱克瓦247 小时前
Java基础——常用算法5
java·开发语言·笔记·github
电摇小人7 小时前
GitHub 全方位指南(续):实战进阶与生态拓展
github
粥里有勺糖9 小时前
视野修炼-技术周刊第126期 | TypeScript #1
前端·node.js·github
lkbhua莱克瓦2420 小时前
Java基础——常用算法4
java·数据结构·笔记·算法·github·排序算法·快速排序
John Song1 天前
git多个账号管理
git·github
破烂pan1 天前
github精选Agent学习repo
llm·github·agent
XU磊2601 天前
Git 实现github仓库管理-删除指定目录下的所有文件并保留目录结构
git·github
逛逛GitHub2 天前
1 天狂揽 4000 多 Star 的 AI 舆情分析开源神器。
github
卡洛斯(编程版2 天前
大仓库推到GitHub大踩坑-Git LFS从安装到使用
git·github
玥轩_5212 天前
Git命令速查手册
大数据·git·elasticsearch·gitee·github·命令速查