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("用户退出成功");
    }
相关推荐
程序员鱼皮1 小时前
6 年 30k star,这个明星项目停止更新!
计算机·程序员·互联网·github·编程
HyperAI超神经3 小时前
对标Hugging Face?GitHub Models新增OpenAI o1/Llama 3.2等, 新功能支持模型并排比较
人工智能·机器学习·github·llama·huggingface
小华同学ai3 小时前
jsMind:炸裂项目,用JavaScript构建的思维导图库,GitHub上的热门开源项目
javascript·开源·github
DisonTangor3 小时前
GitHub Copilot将支持来自Anthropic、Google和OpenAI的模型
github·copilot
油泼辣子多加3 小时前
2024年10月30日Github流行趋势
github
前期后期3 小时前
Android 在github网站下载项目:各种很慢怎么办?比如gradle下载慢;访问github慢;依赖下载慢
android·github
一个很帅的帅哥3 小时前
Mac在Typora配置PicGo图床,以github为例
macos·gitee·github·typora·mac·图床
兮动人3 小时前
解决Github下载速度慢的问题
github
油泼辣子多加4 小时前
2024年10月23日Github流行趋势
github
謬熙4 小时前
GitHub、Gitee、GitLab介绍
gitee·gitlab·github