我需要从ServerAuthIntereptor传递一些数据来调用。
ServerAuthInterceptor:
//用于上下文参数mapprivate static final String AUTH_CONTEXT =“authContext”;私人静态决赛……
由于某种原因,它不起作用 AuthContext class,但如果我分别传递2个上下文值,它会起作用:
AuthContext
Context context = Context .current() .withValue(AUTH_TOKEN_KEY, sessionToken) .withValue(AUTH_ACCOUNT_KEY, account);
服务电话:
/** * To be used from services * @return */ public static Account getCurrentContextAccount() { return (Account) AUTH_ACCOUNT_KEY.get(); } /** * To be used from services * @return */ public static String getCurrentContextSessionToken() { return (String) AUTH_TOKEN_KEY.get(); }
上下文密钥使用引用相等。因此,你必须使用 相同的密钥实例 设置和获取。
此代码重新创建了密钥,因此它不匹配:
Context.current().key(AUTH_CONTEXT).get();
相反应该是:
AUTH_CONTEXT_KEY.get();
使用引用相等性,因此您可以将正常的Java可见性(公共,受保护,包私有,私有)规则应用于值,就像您可以使用 ThreadLocal 。
ThreadLocal