关于响应的token问题
来源:5-11 观察Emos后端项目运行细节

杨清川
2022-08-21
@ApiOperation("注册用户方法") @PostMapping("/register") public R register(@Valid @RequestBody RegisterForm form){ //根据UserID生成token RegisterUserDto userDto = new RegisterUserDto(); BeanUtils.copyProperties(form,userDto); int userId = userService.registerUser(userDto); //生成token字符串 String token = jwtUtil.createToken(userId); //获取该用户的权限列表 Set<String> permissions = userService.searchUserPermissions(userId); //把token缓存到redis saveCacheToken(token, userId); //返回前端响应 return R.ok("register成功").put("token",token).put("permission",permissions); } @PostMapping("/login") @ApiOperation("用户登录接口") public R login(@Valid @RequestBody LoginForm form){ Integer userId = userService.login(form.getCode()); //生成token字符串 String token = jwtUtil.createToken(userId); //获取该用户的权限列表 Set<String> permissions = userService.searchUserPermissions(userId); //把token缓存到redis saveCacheToken(token, userId); //返回前端响应 return R.ok("login成功").put("token",token).put("permission",permissions); }
无论是login功能还是注册功能,都已经手动的put token字符串了
那么Aop类中的环绕通知中的put token怎么用上的。
@Component @Aspect public class TokenAspect { @Resource private ThreadLocalToken threadLocalToken; @Pointcut("execution(public * com.yada.emos.wx.controller.*.*(..)))") public void aspect(){ } /** * 使用环绕通知,去存放token的媒介类中查看是否有新的token生成 * 如果有则放入R对象一起返回,没有则不做处理 * @param point * @return * @throws Throwable */ @Around("aspect()") public Object around(ProceedingJoinPoint point) throws Throwable { R r = (R)point.proceed(); String token = threadLocalToken.getToken(); if (token != null) { r.put("token", token); threadLocalToken.clear(); } return r; } }
写回答
1回答
-
神思者
2022-08-22
你先深入学习Java的ThreadLocal机制,把这个东西先吃透
012023-11-25
相似问题