TaleLin / lin-cms-spring-boot

🔨 基于SpringBoot的CMS/DMS/管理系统开发框架
http://doc.cms.talelin.com/
MIT License
904 stars 253 forks source link

LocalUser 对象内存储的类型冲突问题 #186

Open colorful3 opened 3 years ago

colorful3 commented 3 years ago

此问题属于 #185 的衍生问题。

LocalUser对象是线程安全的当前登录用户,除了 LinCMS 系统内的管理员用户(对应模型为UserDO)外,C端用户也需要同样设置到请求上下文中,甚至说除了用户需要设置到请求上下文中,其他数据也可能需要设置到请求上下文中。现在的 LocalUser 只能 set 和 get UserDO 类型的对象: https://github.com/TaleLin/lin-cms-spring-boot/blob/bd6b0c8692b95bafd14b8ba0585ebb64b35d8788/src/main/java/io/github/talelin/latticy/common/LocalUser.java#L12 这样 LocalUser 基本就不可复用了,如果 C 端用户同样需要设置线程安全的当前登录用户,就不得不重新封装一个类,但里面的代码除了所存储的类型基本都一样的,可以考虑把ThreadLocal中的泛型UserDO类型改为Map<String, Object>,并将类重命名为 LinThreadLocal

    private static ThreadLocal<Map<String, Object>> threadLocal = new ThreadLocal<>();

这样无论开发者想要在ThreadLocalsetget什么类型的对象,就都可以通过该类来操作了。