【Spring Security】安全框架学习(七)

2.3.3.5 退出登陆

我们只需要定义一个登陆接口,然后获取SecurityContextHolder中的认证信息,删除redis中对应的数据即可。

这里只需要在之前的LoginServiceLoginServiceImpl 文件中,添加相应的代码。同时在LoginController 中提供给前端对应的api。

public interface LoginService {
    
    ...
        
    //新加入的方法,在之前的代码上做增加即可
    ResponseResult logout ();
}
@Service
public class LoginServiceImpl implements Loginservcie {
    
    ...

    //新加入的方法,在之前的代码上做增加即可 
    @Override
	public ResponseResult logout() {
        
		//获取seourityContextHolden中的用户id
        Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
        
        //如果用户是未认证的状态下就发起退出请求会被拦截下来,根本到不了方法中去
		LoginUser loginUser = (LoginUser) authentication.getPrincipal();
		Long userId = loginUser.getUser(). getId();
        
		//删除redis中的值
        redisCache.deleteObject("login:"+userid);
        
        return new ResponseResult(200,"注销成功");
    }


}

@RestController
public class LoginController {
    
    ...
        
     //新加入的方法,在之前的代码上做增加即可
	@RequestMapping("/user/logout")
	public ResponseResult logout(){
		return loginServcie.logout();
    }
}

我们在这里的注销相当于只是让原来的token失效了, 重新登录时,如果原来的token没有过期就不会生成新token。

end
  • 作者:dicraft(联系作者)
  • 更新时间:2022-08-28 10:12
  • 版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)
  • 转载声明:如果是转载栈主转载的文章,请附上原文链接
  • 评论

    新增邮件回复功能,回复将会通过邮件形式提醒,请填写有效的邮件!