请问大佬, Java web 后端如何存储和获取当前用户及其部门等信息?

2024-01-26 14:46:22 +08:00
 taogen
3872 次点击
所在节点    Java
21 条回复
echo1937
2024-01-26 14:55:08 +08:00
前端请求进来的时候,带上 token ,处理请求时通过 token 即可查询得到当前用户及其部门,如果是 jwt 的话,可直接保存非敏感信息,直接取出来。
j1132888093
2024-01-26 14:58:06 +08:00
这问题和 请问怎么用 Java 写一个网站 有什么区别....
taogen
2024-01-26 15:04:41 +08:00
@j1132888093 具体一点就是,如何在任意方法中获取当前用户信息?不想从 controller 一直传下去
taogen
2024-01-26 15:07:22 +08:00
公司老项目没用 Spring Security
komorebi12138
2024-01-26 15:07:51 +08:00
可以存 redis 里面,以后通过 redis 取
fuhanfeng
2024-01-26 15:08:44 +08:00
@taogen 写个 filter 保存到 ThreadLocal
bacon2994
2024-01-26 15:11:35 +08:00
前端带 token ,进来用 aop 解析完用户信息之后放入 threadLocal 中,写个工具类,需要的时候就能取到
Leviathann
2024-01-26 15:21:05 +08:00
从 controller 一直传下去
有什么问题

乱搞 threadlocal 和用 map 传参有什么区别
issakchill
2024-01-26 15:27:53 +08:00
token 进来的时候 常用信息写 threadlocal redis 也存一份
MIUIOS
2024-01-26 15:34:45 +08:00
要么 filter 要么 interceptor , 塞进当前线程 threadlocal 用完记得 remove 就行了, 不然会内存泄露
taogen
2024-01-26 15:36:16 +08:00
@Leviathann #8 代码显得很臃肿。整个调用链每个方法都要带上用户参数。有些中间方法可能用不到这个参数但也要带。
ZField
2024-01-26 15:39:46 +08:00
可以在你鉴权的时候塞进本地线程里,然后需要的时候在从里面取出来,或者直接上 redis
j1132888093
2024-01-26 15:50:31 +08:00
@taogen #3 我们公司用 jwt ,前端通过请求头传给后端,后端不管在哪儿都能用 RequestContextHolder 去拿请求头里的 token 然后解析出用户信息
whoisjohnlee
2024-01-26 16:00:28 +08:00
楼上各位是没写过 Java Web 吗?还各种玩意儿一大堆,直接丢 Session 不就可以了? Spring 也提供了 Session 序列化存储到 Redis ,需要这么多乱七八糟的东西吗?
RightHand
2024-01-26 16:13:26 +08:00
weakmap ?
justNoBody
2024-01-26 16:14:25 +08:00
麻烦 OP 老老实实从 controller 传进去。
不要让你的逻辑代码和用户状态绑定,要有约束,对于入参要有固定的返回结果,你的方法越简单,维护起来越容易,也方便其他人维护。
你现在还有救,别乱搞,屎山就是到处捆绑状态来的,反正让我做代码审查,我肯定不会同意。
至于你用 session ,jwt ,还是 redis 这是另外的话题。
如果你的系统是单体应用,且很大概率在未来两三年内都不会部署多个节点,那就用 session 。
如果需要部署多个节点,又不想依赖于三方组件,想降低维护成本,那就自签 jwt 。
至于 redis ,如果你真的需要,你就不会发这个帖子
taogen
2024-01-26 16:14:29 +08:00
@whoisjohnlee 是啊,放到 session 中也行,可以不用 ThreadLocal 了。
leimu012
2024-01-26 16:50:48 +08:00
@fu82581983 +1 ,我们就是这么用的,再写个从 ThreadLocal 取各种信息的工具类,其他地方直接用这个工具类 get 就行
KOMA1NIUJUNSHENG
2024-01-26 16:54:10 +08:00
单机 session ,spring security 的实现原理也是 ThreadLocal 。
SilenceLL
2024-01-26 17:08:50 +08:00
jwt 存用户 id ,请求进来的时候在拦截器中查询用户对应的信息存储到 ThreadLocal 中

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1011808

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX