@Priority(value=-2147483648)
public class MaskingLoggingFilter
extends java.lang.Object
implements javax.ws.rs.client.ClientRequestFilter, javax.ws.rs.client.ClientResponseFilter, javax.ws.rs.ext.WriterInterceptor
| Modifier and Type | Class and Description |
|---|---|
protected class |
MaskingLoggingFilter.LoggingStream
This class is responsible for logging the request entities, it will truncate at maxEntitySize
and add "...more..." to the end of the entity log string.
|
| Modifier and Type | Field and Description |
|---|---|
protected java.util.concurrent.atomic.AtomicLong |
_id |
static java.util.List<java.lang.String> |
DEFAULT_MASKED_HEADER_NAMES
Default list of header names that should be masked.
|
protected static java.lang.String |
ENTITY_STREAM_PROPERTY
Property name for the entity stream property
|
protected java.util.logging.Level |
level |
protected java.util.logging.Logger |
logger |
protected static java.lang.String |
LOGGING_ID_PROPERTY
Property name for the logging record id property
|
protected java.util.Set<java.lang.String> |
maskedHeaderNames |
protected int |
maxEntitySize |
protected static java.lang.String |
REQUEST_PREFIX
Prefix for request log entries.
|
protected static java.lang.String |
RESPONSE_PREFIX
Prefix for response log entries.
|
protected static java.lang.String |
SECTION_PREFIX
Prefix that marks the beginning of a request or response section.
|
| Constructor and Description |
|---|
MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level)
Creates a masking logging filter for the specified logger with entity logging disabled.
|
MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level,
int maxEntitySize)
Creates a masking logging filter for the specified logger.
|
MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level,
int maxEntitySize,
java.util.List<java.lang.String> maskedHeaderNames)
Creates a masking logging filter for the specified logger.
|
MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level,
java.util.List<java.lang.String> maskedHeaderNames)
Creates a masking logging filter for the specified logger with entity logging disabled.
|
| Modifier and Type | Method and Description |
|---|---|
void |
addMaskedHeaderName(java.lang.String maskedHeaderName)
Add a header name to the list of masked header names.
|
protected java.lang.StringBuilder |
appendId(java.lang.StringBuilder sb,
long id) |
void |
aroundWriteTo(javax.ws.rs.ext.WriterInterceptorContext context) |
protected void |
buildEntityLogString(java.lang.StringBuilder sb,
byte[] entity,
int entitySize,
java.nio.charset.Charset charset) |
void |
filter(javax.ws.rs.client.ClientRequestContext requestContext) |
void |
filter(javax.ws.rs.client.ClientRequestContext requestContext,
javax.ws.rs.client.ClientResponseContext responseContext) |
protected java.util.Set<java.util.Map.Entry<java.lang.String,java.util.List<java.lang.String>>> |
getSortedHeaders(java.util.Set<java.util.Map.Entry<java.lang.String,java.util.List<java.lang.String>>> headers) |
protected void |
log(java.lang.StringBuilder sb) |
protected void |
printHeaders(java.lang.StringBuilder sb,
long id,
java.lang.String prefix,
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> headers)
Logs each of the HTTP headers, masking the value of the header if the header key is
in the list of masked header names.
|
protected void |
printRequestLine(java.lang.StringBuilder sb,
java.lang.String note,
long id,
java.lang.String method,
java.net.URI uri) |
protected void |
printResponseLine(java.lang.StringBuilder sb,
java.lang.String note,
long id,
int status) |
void |
setMaskedHeaderNames(java.util.List<java.lang.String> maskedHeaderNames)
Set the list of header names to mask values for.
|
public static final java.util.List<java.lang.String> DEFAULT_MASKED_HEADER_NAMES
protected static final java.lang.String REQUEST_PREFIX
protected static final java.lang.String RESPONSE_PREFIX
protected static final java.lang.String SECTION_PREFIX
protected static final java.lang.String ENTITY_STREAM_PROPERTY
protected static final java.lang.String LOGGING_ID_PROPERTY
protected final java.util.logging.Logger logger
protected final java.util.logging.Level level
protected final int maxEntitySize
protected final java.util.concurrent.atomic.AtomicLong _id
protected java.util.Set<java.lang.String> maskedHeaderNames
public MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level)
logger - the logger to log messages tolevel - level at which the messages will be loggedpublic MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level,
int maxEntitySize)
logger - the logger to log messages tolevel - level at which the messages will be loggedmaxEntitySize - maximum number of entity bytes to be logged. When logging if the maxEntitySize
is reached, the entity logging will be truncated at maxEntitySize and "...more..." will be added at
the end of the log entry. If maxEntitySize is <= 0, entity logging will be disabledpublic MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level,
java.util.List<java.lang.String> maskedHeaderNames)
logger - the logger to log messages tolevel - level at which the messages will be loggedmaskedHeaderNames - a list of header names that should have the values maskedpublic MaskingLoggingFilter(java.util.logging.Logger logger,
java.util.logging.Level level,
int maxEntitySize,
java.util.List<java.lang.String> maskedHeaderNames)
logger - the logger to log messages tolevel - level at which the messages will be loggedmaxEntitySize - maximum number of entity bytes to be logged. When logging if the maxEntitySize
is reached, the entity logging will be truncated at maxEntitySize and "...more..." will be added at
the end of the log entry. If maxEntitySize is <= 0, entity logging will be disabledmaskedHeaderNames - a list of header names that should have the values maskedpublic void setMaskedHeaderNames(java.util.List<java.lang.String> maskedHeaderNames)
maskedHeaderNames - a list of header names that should have the values masked, if null, will clear
the header names to maskpublic void addMaskedHeaderName(java.lang.String maskedHeaderName)
maskedHeaderName - the masked header name to addprotected void log(java.lang.StringBuilder sb)
protected java.lang.StringBuilder appendId(java.lang.StringBuilder sb,
long id)
protected void printRequestLine(java.lang.StringBuilder sb,
java.lang.String note,
long id,
java.lang.String method,
java.net.URI uri)
protected void printResponseLine(java.lang.StringBuilder sb,
java.lang.String note,
long id,
int status)
protected java.util.Set<java.util.Map.Entry<java.lang.String,java.util.List<java.lang.String>>> getSortedHeaders(java.util.Set<java.util.Map.Entry<java.lang.String,java.util.List<java.lang.String>>> headers)
protected void printHeaders(java.lang.StringBuilder sb,
long id,
java.lang.String prefix,
javax.ws.rs.core.MultivaluedMap<java.lang.String,java.lang.String> headers)
sb - the StringBuilder to build up the logging info inid - the ID for the logging lineprefix - the logging line prefix characterheaders - a MultiValue map holding the header keys and valuesprotected void buildEntityLogString(java.lang.StringBuilder sb,
byte[] entity,
int entitySize,
java.nio.charset.Charset charset)
public void filter(javax.ws.rs.client.ClientRequestContext requestContext)
throws java.io.IOException
filter in interface javax.ws.rs.client.ClientRequestFilterjava.io.IOExceptionpublic void filter(javax.ws.rs.client.ClientRequestContext requestContext,
javax.ws.rs.client.ClientResponseContext responseContext)
throws java.io.IOException
filter in interface javax.ws.rs.client.ClientResponseFilterjava.io.IOExceptionpublic void aroundWriteTo(javax.ws.rs.ext.WriterInterceptorContext context)
throws java.io.IOException,
javax.ws.rs.WebApplicationException
aroundWriteTo in interface javax.ws.rs.ext.WriterInterceptorjava.io.IOExceptionjavax.ws.rs.WebApplicationException