blob: 1275832a6471b17a84c757261aabe15918a8eb1f [file] [log] [blame]
---
title: Post Processing of Region Data
---
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
The `PostProcessor` interface allows the definition of a callback
that is invoked after any and all client and `gfsh` operations that get data,
but before the data is returned.
It permits the callback to intervene and format the data
that is to be returned.
The callbacks do not modify the region data,
only the data to be returned.
The `processRegionValue` method is given the principal of the
operation requester.
The operation will already have been completed,
implying that the principal will have been authorized to complete
the requested operation.
The post processing can therefore format the returned data based
on the identity of the requester (principal).
<!-- GEODE-2153 aims to make this possible:
A use of post processing will be to sanitize or mask out sensitive
region information,
while providing the remainder of a region entry unchanged.
An implementation can alter the entry for some requesters,
but not other requesters.
-->
The `processRegionValue` method is invoked for these API calls:
- `Region.get`
- `Region.getAll`
- `Query.execute`
- `CqQuery.execute`
- `CqQuery.executeWithInitialResults`
- `CqListener.onEvent`
- for a relevant region event from `CacheListener.afterUpdate` for which
there is interest registered with `Region.registerInterest`
Care should be taken when designing a system that implements the
post processing callback.
It incurs the performance penalty of an extra method invocation
on every get operation.
## Implement Post Processing
Complete these items to implement post processing.
- Define the `security-post-processor` property.
See [Enable Security with Property Definitions](enable_security.html)
for details about this property.
- Implement the `processRegionValue` method of the `PostProcessor` interface.