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("用户退出成功");
    }
相关推荐
XIE3928 小时前
如何开发一个脚手架
前端·javascript·git·npm·node.js·github
不爱吃萝卜的嘤嘤怪9 小时前
Github工作流
github
是Yu欸14 小时前
【Github】如何使用Git将本地项目上传到Github
人工智能·git·深度学习·github·论文笔记·cvpr
vvw&20 小时前
使用 Nginx 在 Ubuntu 22.04 上安装 LibreNMS 开源网络监控系统
linux·运维·服务器·nginx·ubuntu·github·librenms
狂奔solar21 小时前
AWS codebuild + jenkins + github 实践CI/CD
ci/cd·github·jenkins·codebuild
vvw&1 天前
如何在 Ubuntu 22 04 上安装和配置 Ansible 自动化平台
linux·运维·服务器·ubuntu·自动化·github·ansible
油泼辣子多加1 天前
2024年11月23日Github流行趋势
github
n***85942 天前
一键AI换脸软件,支持表情控制,唇形同步Facefusion-3.0.0发布!支持N卡和CPU,一键启动包
人工智能·github·开源软件
夏沫的梦2 天前
Git命令使用与原理详解
git·gitlab·github
Huazzi.2 天前
免费好用的静态网页托管平台全面对比介绍
前端·网络·github·web