|
|
|
@ -18,12 +18,25 @@ import javax.servlet.http.HttpServletRequest;
|
|
|
|
|
* @CONTACT 317758022@qq.com
|
|
|
|
|
* @DESC
|
|
|
|
|
*/
|
|
|
|
|
// 使用lombok的@Slf4j注解,用于自动生成日志相关的代码,方便在类中记录各种操作相关的日志信息,便于后续查看操作情况以及进行问题排查,比如在获取当前用户信息出现异常等情况时记录详细的错误日志。
|
|
|
|
|
@Slf4j
|
|
|
|
|
public class BaseController {
|
|
|
|
|
|
|
|
|
|
// 通过Spring的依赖注入机制,使用@Autowired注解自动注入CommonCacheUtil类型的实例,CommonCacheUtil类应该是用于操作缓存(可能是Redis等缓存)的工具类,后续会借助它从缓存中获取用户相关信息。
|
|
|
|
|
@Autowired
|
|
|
|
|
private CommonCacheUtil commonCacheUtil;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* 该方法用于从请求中获取当前登录用户的信息,其大致逻辑如下:
|
|
|
|
|
* 首先,尝试从HTTP请求中读取登录相关的Cookie信息(通过调用CookieUtil.readLoginToken方法),这个Cookie中存储的应该是登录令牌(token),用于标识用户的登录状态。
|
|
|
|
|
* 如果读取到的登录令牌为空(即StringUtils.isBlank判断为真,StringUtils应该是自定义的字符串工具类,用于判断字符串是否为空,包括null和空字符串情况),说明用户未登录,此时会抛出一个自定义的SnailmallException异常,提示用户未登录,无法获取当前用户信息。
|
|
|
|
|
* 接着,如果获取到了登录令牌,就使用这个令牌作为键,通过注入的CommonCacheUtil实例从缓存中获取对应的用户信息字符串(通过调用commonCacheUtil.getCacheValue方法),缓存中存储的应该是将用户对象转换为JSON字符串后的形式。
|
|
|
|
|
* 如果从缓存中获取到的用户信息字符串为null,意味着缓存中不存在该用户信息或者出现了其他异常情况,此时会抛出一个SnailmallException异常,使用ResponseEnum.NEED_LOGIN中定义的状态码和描述信息来表明需要用户登录,即当前用户的登录状态可能存在问题或者已失效等情况。
|
|
|
|
|
* 最后,如果从缓存中成功获取到了用户信息字符串,就通过JsonUtil.Str2Obj方法(JsonUtil应该是用于处理JSON序列化和反序列化的工具类)将用户信息字符串反序列化为User类型的对象并返回,这样就获取到了当前登录用户的完整信息对象。
|
|
|
|
|
*
|
|
|
|
|
* @param httpServletRequest 表示HTTP请求对象,通过它可以获取客户端发送过来的各种信息,包括存储用户登录令牌的Cookie信息等,用于后续查找用户信息的操作。
|
|
|
|
|
* @return 返回获取到的当前登录用户对应的User类型对象,如果在获取过程中出现上述提到的异常情况则会抛出相应异常,终止方法的执行。
|
|
|
|
|
*/
|
|
|
|
|
User getCurrentUser(HttpServletRequest httpServletRequest){
|
|
|
|
|
String loginToken = CookieUtil.readLoginToken(httpServletRequest);
|
|
|
|
|
if(StringUtils.isBlank(loginToken)){
|
|
|
|
@ -36,4 +49,4 @@ public class BaseController {
|
|
|
|
|
User user = JsonUtil.Str2Obj(userJsonStr,User.class);
|
|
|
|
|
return user;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|