小编Eug*_*ene的帖子

ServerInterceptor 中的 grpc-java 异步调用

我有一个 grpc-java 服务器,需要在处理请求之前对身份验证服务进行异步调用。我认为这应该在拦截器中完成,但它需要从interceptCall()同步返回一个Listener

class AuthInterceptor implements ServerInterceptor {

    @Override
    public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(
        ServerCall<ReqT, RespT> call,
        Metadata headers,
        ServerCallHandler<ReqT, RespT> next
    ) {
        String token = ""; //get token from headers
        authService.authorize(token).subscribe(
            ok -> // process the request
            error -> call.close(Status.UNAUTHENTICATED, headers)
        );
        // Here we need to return a Listener, but we haven't started a call yet
    }
}
Run Code Online (Sandbox Code Playgroud)

所以问题是:如何从 ServerInterceptor 进行异步调用,如果无法完成,那么异步验证 grpc 请求的正确方法是什么?我知道它可以直接在 grpc 服务中使用 StreamObservers 完成,但请求授权是一个交叉问题,拦截器似乎是一个完美的地方。

java authorization asynchronous interceptor grpc

7
推荐指数
1
解决办法
2315
查看次数

如何从Kotlin中的枚举类和字符串获取原始类型的枚举值

我在Java中有以下代码:

Enum getEnumValue(Class<?> enumClass, String value) {
    return Enum.valueOf((Class<Enum>) enumClass, value);
}
Run Code Online (Sandbox Code Playgroud)

如何用Kotlin重写它?

更新资料

enumValueOf<>()函数在这种情况下不适用,因为我不知道实际的类型参数,我只有一个Class<?>类型未知的对象(Class<*>在kotlin中)和一个名称字符串。已知该类为枚举: Class.isEnum返回true。使用这两个输入,上面的Java代码允许获取具有原始类型的枚举的值。这正是我所需要的,因为我对枚举的特定类型不感兴趣。但是我不知道如何在kotlin中获得相同的结果。

generics enums kotlin

1
推荐指数
1
解决办法
3240
查看次数