From 7d878d7c64c9945c99a7c4b1750d4d7170ee2c7d Mon Sep 17 00:00:00 2001 From: zhouyu <3065526146@qq.com> Date: Tue, 17 Dec 2024 08:57:43 +0800 Subject: [PATCH] 111 --- .../com/njupt/swg/controller/BaseController.java | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/snailmall-shipping-service/src/main/java/com/njupt/swg/controller/BaseController.java b/snailmall-shipping-service/src/main/java/com/njupt/swg/controller/BaseController.java index 8c0e6ba..99d3063 100644 --- a/snailmall-shipping-service/src/main/java/com/njupt/swg/controller/BaseController.java +++ b/snailmall-shipping-service/src/main/java/com/njupt/swg/controller/BaseController.java @@ -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; } -} +} \ No newline at end of file