1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.hadoop.hbase.ipc;
22
23 import org.apache.hadoop.classification.InterfaceAudience;
24 import org.apache.hadoop.hbase.IpcProtocol;
25 import org.apache.hadoop.hbase.security.User;
26
27 import java.net.InetAddress;
28
29
30
31
32
33
34
35 @InterfaceAudience.Private
36 public class RequestContext {
37 private static ThreadLocal<RequestContext> instance =
38 new ThreadLocal<RequestContext>() {
39 protected RequestContext initialValue() {
40 return new RequestContext(null, null, null);
41 }
42 };
43
44 public static RequestContext get() {
45 return instance.get();
46 }
47
48
49
50
51
52
53
54 public static User getRequestUser() {
55 RequestContext ctx = instance.get();
56 if (ctx != null) {
57 return ctx.getUser();
58 }
59 return null;
60 }
61
62
63
64
65
66 public static String getRequestUserName() {
67 User user = getRequestUser();
68 if (user != null) {
69 return user.getShortName();
70 }
71 return null;
72 }
73
74
75
76
77
78 public static boolean isInRequestContext() {
79 RequestContext ctx = instance.get();
80 if (ctx != null) {
81 return ctx.isInRequest();
82 }
83 return false;
84 }
85
86
87
88
89
90
91
92 public static void set(User user,
93 InetAddress remoteAddress,
94 Class<? extends IpcProtocol> protocol) {
95 RequestContext ctx = instance.get();
96 ctx.user = user;
97 ctx.remoteAddress = remoteAddress;
98 ctx.protocol = protocol;
99 ctx.inRequest = true;
100 }
101
102
103
104
105 public static void clear() {
106 RequestContext ctx = instance.get();
107 ctx.user = null;
108 ctx.remoteAddress = null;
109 ctx.protocol = null;
110 ctx.inRequest = false;
111 }
112
113 private User user;
114 private InetAddress remoteAddress;
115 private Class<? extends IpcProtocol> protocol;
116
117 private boolean inRequest;
118
119 private RequestContext(User user, InetAddress remoteAddr,
120 Class<? extends IpcProtocol> protocol) {
121 this.user = user;
122 this.remoteAddress = remoteAddr;
123 this.protocol = protocol;
124 }
125
126 public User getUser() {
127 return user;
128 }
129
130 public InetAddress getRemoteAddress() {
131 return remoteAddress;
132 }
133
134 public Class<? extends IpcProtocol> getProtocol() {
135 return protocol;
136 }
137
138 public boolean isInRequest() {
139 return inRequest;
140 }
141 }