关于响应的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
相似问题