1、由于invoke只有一次拦截所以得写在invoker.invoke(invocation);之后
@Override
public Result invoke(Invoker<?> invoker, Invocation invocation) throws RpcException {
Result rs = null;
try {
...
UserContext.addContext(userVo);
rs = invoker.invoke(invocation);
} catch (Exception e) {
e.printStackTrace();
} finally {
UserContext.removeUserContext();
}
return rs;
}
public class UserContext {
private static ThreadLocal<UserVo> userThreadLocal = new ThreadLocal<>();
public static void addContext(UserVo userVo){
userThreadLocal.set(userVo);
}
public static UserVo getUserContext(){
return contextUser();
}
public static void removeUserContext(){
userThreadLocal.remove();
}
private static UserVo contextUser(){
if(userThreadLocal.get()==null){
userThreadLocal.set(new UserVo());
}
return userThreadLocal.get();
}
}