SpringSecurity退出登录功能

接上篇token校验,现在实现一下退出登录的功能

Controller层

    @PostMapping("/logout")
    public Result logout(){
        return LoginService.logout();
    }

Service层

退出登录的本质就是要删除redis中缓存的用户信息,因为调接口就必须携带token,就会走认证过滤器的流程,如果redis中没有对应的用户信息,那么token就是无效的。

我们要获取userId,然后根据userId删除redis中的缓存,那么就用SecurityContextHolder来获取userId。 SecurityContextHolder底层是用ThreadLocal实现的,也就说明同一个线程里都可以访问到之前在过滤器里面存储到SecurityContextHolder里的用户对象。

@Override
    public Result logout() {
        //1、获取token,解析出userId
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        LoginUser loginUser = (LoginUser) authentication.getPrincipal(); //强转
        Long userId = loginUser.getUser().getId();
        //2、删除redis中缓存的用户信息
        redisCache.deleteObject("login:"+userId);
        return Result.okResult();
    }
最后别忘了在SecurityConfig配置类里加上http.antMatchers("/logout").authenticated()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容