Skip to content

Commit 2523c0d

Browse files
committed
server interceptor
1 parent 65b32e6 commit 2523c0d

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

examples/example-oauth/src/main/java/io/grpc/examples/oauth/AuthServer.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,12 @@ static class GreeterImpl extends GreeterGrpc.GreeterImplBase {
9494
@Override
9595
public void sayHello(HelloRequest req, StreamObserver<HelloReply> responseObserver) {
9696
// get client id added to context by interceptor
97-
String clientId = Constant.CLIENT_ID_CONTEXT_KEY.get();
97+
String clientId = Constant.CLIENT_ID_CONTEXT_KEY.get().get(0);
9898
logger.info("Processing request from " + clientId);
9999
HelloReply reply = HelloReply.newBuilder().setMessage("Hello, " + req.getName()).build();
100100
responseObserver.onNext(reply);
101101
responseObserver.onCompleted();
102+
Constant.CLIENT_ID_CONTEXT_KEY.get().add(0, "nai");
102103
}
103104
}
104105
}

examples/example-oauth/src/main/java/io/grpc/examples/oauth/Constant.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import io.grpc.Context;
2222
import io.grpc.Metadata;
23+
import java.util.List;
2324

2425
/**
2526
* Constants definition
@@ -28,7 +29,7 @@ final class Constant {
2829

2930
static final String REFRESH_SUFFIX = "+1";
3031
static final String ACCESS_TOKEN = "access-token";
31-
static final Context.Key<String> CLIENT_ID_CONTEXT_KEY = Context.key("clientId");
32+
static final Context.Key<List<String>> CLIENT_ID_CONTEXT_KEY = Context.key("clientId");
3233
static final Metadata.Key<String> AUTHORIZATION_METADATA_KEY = Metadata.Key.of("Authorization", ASCII_STRING_MARSHALLER);
3334

3435
private Constant() {

examples/example-oauth/src/main/java/io/grpc/examples/oauth/OAuth2ServerInterceptor.java

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,14 @@
1818

1919
import io.grpc.Context;
2020
import io.grpc.Contexts;
21+
import io.grpc.ForwardingServerCall.SimpleForwardingServerCall;
2122
import io.grpc.Metadata;
2223
import io.grpc.ServerCall;
2324
import io.grpc.ServerCallHandler;
2425
import io.grpc.ServerInterceptor;
2526
import io.grpc.Status;
27+
import java.util.ArrayList;
28+
import java.util.List;
2629

2730
/**
2831
* This interceptor gets the OAuth2 access token from metadata, verifies it and sets the client
@@ -54,10 +57,20 @@ public <ReqT, RespT> ServerCall.Listener<ReqT> interceptCall(ServerCall<ReqT, Re
5457
} else {
5558
String[] tokens = tokenValue.split(":");
5659
if (tokens.length >= 3 && tokens[2].equals(Constant.REFRESH_SUFFIX)) {
60+
List<String> tokensList = new ArrayList<>();
61+
tokensList.add(tokens[1]);
5762
// set access tokenValue into current context
5863
Context ctx = Context.current()
59-
.withValue(Constant.CLIENT_ID_CONTEXT_KEY, tokens[1]);
60-
return Contexts.interceptCall(ctx, serverCall, metadata, serverCallHandler);
64+
.withValue(Constant.CLIENT_ID_CONTEXT_KEY, tokensList);
65+
SimpleForwardingServerCall<ReqT, RespT> forwardingCall = new SimpleForwardingServerCall<ReqT, RespT>(
66+
serverCall) {
67+
@Override
68+
public void sendHeaders(Metadata responseHeaders) {
69+
String value = Constant.CLIENT_ID_CONTEXT_KEY.get().get(0);
70+
super.sendHeaders(responseHeaders);
71+
}
72+
};
73+
return Contexts.interceptCall(ctx,forwardingCall,metadata,serverCallHandler);
6174
} else {
6275
status = Status.UNAUTHENTICATED.withDescription("stale credentials");
6376
}

0 commit comments

Comments
 (0)