13
13
import org .elasticsearch .action .ActionListener ;
14
14
import org .elasticsearch .client .internal .node .NodeClient ;
15
15
import org .elasticsearch .common .util .concurrent .ThreadContext ;
16
+ import org .elasticsearch .rest .FilterRestHandler ;
16
17
import org .elasticsearch .rest .RestChannel ;
17
18
import org .elasticsearch .rest .RestHandler ;
18
19
import org .elasticsearch .rest .RestRequest ;
24
25
import org .elasticsearch .xpack .security .authz .restriction .WorkflowService ;
25
26
import org .elasticsearch .xpack .security .operator .OperatorPrivileges ;
26
27
27
- import java .util .List ;
28
-
29
28
import static org .elasticsearch .core .Strings .format ;
30
29
31
- public class SecurityRestFilter implements RestHandler {
30
+ public class SecurityRestFilter extends FilterRestHandler implements RestHandler {
32
31
33
32
private static final Logger logger = LogManager .getLogger (SecurityRestFilter .class );
34
33
35
- private final RestHandler restHandler ;
36
34
private final SecondaryAuthenticator secondaryAuthenticator ;
37
35
private final AuditTrailService auditTrailService ;
38
36
private final boolean enabled ;
@@ -49,27 +47,18 @@ public SecurityRestFilter(
49
47
RestHandler restHandler ,
50
48
OperatorPrivileges .OperatorPrivilegesService operatorPrivilegesService
51
49
) {
50
+ super (restHandler );
52
51
this .enabled = enabled ;
53
52
this .threadContext = threadContext ;
54
53
this .secondaryAuthenticator = secondaryAuthenticator ;
55
54
this .auditTrailService = auditTrailService ;
56
55
this .workflowService = workflowService ;
57
- this .restHandler = restHandler ;
58
56
// can be null if security is not enabled
59
57
this .operatorPrivilegesService = operatorPrivilegesService == null
60
58
? OperatorPrivileges .NOOP_OPERATOR_PRIVILEGES_SERVICE
61
59
: operatorPrivilegesService ;
62
60
}
63
61
64
- @ Override
65
- public boolean allowSystemIndexAccessByDefault () {
66
- return restHandler .allowSystemIndexAccessByDefault ();
67
- }
68
-
69
- public RestHandler getConcreteRestHandler () {
70
- return restHandler .getConcreteRestHandler ();
71
- }
72
-
73
62
@ Override
74
63
public void handleRequest (RestRequest request , RestChannel channel , NodeClient client ) throws Exception {
75
64
// requests with the OPTIONS method should be handled elsewhere, and not by calling {@code RestHandler#handleRequest}
@@ -94,17 +83,17 @@ public void handleRequest(RestRequest request, RestChannel channel, NodeClient c
94
83
if (secondaryAuthentication != null ) {
95
84
logger .trace ("Found secondary authentication {} in REST request [{}]" , secondaryAuthentication , request .uri ());
96
85
}
97
- workflowService .resolveWorkflowAndStoreInThreadContext (restHandler , threadContext );
86
+ workflowService .resolveWorkflowAndStoreInThreadContext (getConcreteRestHandler () , threadContext );
98
87
doHandleRequest (request , channel , client );
99
88
}, e -> handleException (request , channel , e )));
100
89
}
101
90
102
91
private void doHandleRequest (RestRequest request , RestChannel channel , NodeClient client ) throws Exception {
103
92
threadContext .sanitizeHeaders ();
104
93
// operator privileges can short circuit to return a non-successful response
105
- if (operatorPrivilegesService .checkRest (restHandler , request , channel , threadContext )) {
94
+ if (operatorPrivilegesService .checkRest (getConcreteRestHandler () , request , channel , threadContext )) {
106
95
try {
107
- restHandler .handleRequest (request , channel , client );
96
+ getDelegate () .handleRequest (request , channel , client );
108
97
} catch (Exception e ) {
109
98
logger .debug (() -> format ("Request handling failed for REST request [%s]" , request .uri ()), e );
110
99
throw e ;
@@ -123,40 +112,16 @@ protected void handleException(RestRequest request, RestChannel channel, Excepti
123
112
}
124
113
}
125
114
126
- @ Override
127
- public boolean canTripCircuitBreaker () {
128
- return restHandler .canTripCircuitBreaker ();
129
- }
130
-
131
- @ Override
132
- public boolean supportsContentStream () {
133
- return restHandler .supportsContentStream ();
134
- }
135
-
136
- @ Override
137
- public boolean allowsUnsafeBuffers () {
138
- return restHandler .allowsUnsafeBuffers ();
139
- }
140
-
141
- @ Override
142
- public List <Route > routes () {
143
- return restHandler .routes ();
144
- }
145
-
146
115
// for testing
147
116
OperatorPrivileges .OperatorPrivilegesService getOperatorPrivilegesService () {
148
117
return operatorPrivilegesService ;
149
118
}
150
119
151
120
private RestRequest maybeWrapRestRequest (RestRequest restRequest ) {
152
- if (restHandler instanceof RestRequestFilter ) {
153
- return (( RestRequestFilter ) restHandler ) .getFilteredRequest (restRequest );
121
+ if (getConcreteRestHandler () instanceof RestRequestFilter rrf ) {
122
+ return rrf .getFilteredRequest (restRequest );
154
123
}
155
124
return restRequest ;
156
125
}
157
126
158
- @ Override
159
- public boolean mediaTypesValid (RestRequest request ) {
160
- return restHandler .mediaTypesValid (request );
161
- }
162
127
}
0 commit comments