2.3.3.5 退出登陆
我们只需要定义一个登陆接口,然后获取SecurityContextHolder中的认证信息,删除redis中对应的数据即可。
这里只需要在之前的LoginService 和 LoginServiceImpl 文件中,添加相应的代码。同时在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。
评论