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