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