Class EncryptInterceptor
- java.lang.Object
-
- org.apache.catalina.tribes.group.ChannelInterceptorBase
-
- org.apache.catalina.tribes.group.interceptors.EncryptInterceptor
-
- All Implemented Interfaces:
ChannelInterceptor
,EncryptInterceptorMBean
,Heartbeat
,MembershipListener
public class EncryptInterceptor extends ChannelInterceptorBase implements EncryptInterceptorMBean
Adds encryption using a pre-shared key. The length of the key (in bytes) must be acceptable for the encryption algorithm being used. For example, for AES, you must use a key of either 16 bytes (128 bits, 24 bytes 192 bits), or 32 bytes (256 bits). You can supply the raw key bytes by callingsetEncryptionKey(byte[])
or the hex-encoded binary bytes by callingsetEncryptionKey(String)
.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
-
-
Field Summary
Fields Modifier and Type Field Description protected static StringManager
sm
-
Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag
-
-
Constructor Summary
Constructors Constructor Description EncryptInterceptor()
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description java.lang.String
getEncryptionAlgorithm()
Gets the encryption algorithm being used to encrypt and decrypt channel messages.byte[]
getEncryptionKey()
Gets the encryption key being used for encryption and decryption.java.lang.String
getEncryptionKeyString()
java.lang.String
getProviderName()
Gets the JCA provider name used for cryptographic activities.void
messageReceived(ChannelMessage msg)
themessageReceived
is invoked when a message is received.void
sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)
ThesendMessage
method is called when a message is being sent to one more destinations.void
setEncryptionAlgorithm(java.lang.String algorithm)
Sets the encryption algorithm to be used for encrypting and decrypting channel messages.void
setEncryptionKey(byte[] key)
Sets the encryption key for encryption and decryption.void
setEncryptionKey(java.lang.String keyBytes)
Gets the encryption key being used for encryption and decryption.void
setEncryptionKeyString(java.lang.String encryptionKeyString)
void
setProviderName(java.lang.String provider)
Sets the JCA provider name used for cryptographic activities.void
start(int svc)
Starts up the channel.void
stop(int svc)
Shuts down the channel.-
Methods inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, heartbeat, memberAdded, memberDisappeared, okToProcess, setChannel, setNext, setOptionFlag, setPrevious
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
-
Methods inherited from interface org.apache.catalina.tribes.group.interceptors.EncryptInterceptorMBean
getOptionFlag, setOptionFlag
-
-
-
-
Field Detail
-
sm
protected static final StringManager sm
-
-
Method Detail
-
start
public void start(int svc) throws ChannelException
Description copied from class:ChannelInterceptorBase
Starts up the channel. This can be called multiple times for individual services to start The svc parameter can be the logical or value of any constants- Specified by:
start
in interfaceChannelInterceptor
- Overrides:
start
in classChannelInterceptorBase
- Parameters:
svc
- int value of
DEFAULT - will start all services
MBR_RX_SEQ - starts the membership receiver
MBR_TX_SEQ - starts the membership broadcaster
SND_TX_SEQ - starts the replication transmitter
SND_RX_SEQ - starts the replication receiver- Throws:
ChannelException
- if a startup error occurs or the service is already started.- See Also:
Channel
-
stop
public void stop(int svc) throws ChannelException
Description copied from class:ChannelInterceptorBase
Shuts down the channel. This can be called multiple times for individual services to shutdown The svc parameter can be the logical or value of any constants- Specified by:
stop
in interfaceChannelInterceptor
- Overrides:
stop
in classChannelInterceptorBase
- Parameters:
svc
- int value of
DEFAULT - will shutdown all services
MBR_RX_SEQ - stops the membership receiver
MBR_TX_SEQ - stops the membership broadcaster
SND_TX_SEQ - stops the replication transmitter
SND_RX_SEQ - stops the replication receiver- Throws:
ChannelException
- if a startup error occurs or the service is already started.- See Also:
Channel
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
Description copied from interface:ChannelInterceptor
ThesendMessage
method is called when a message is being sent to one more destinations. The interceptor can modify any of the parameters and then pass on the message down the stack by invokinggetNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invokinggetNext().sendMessage(destination,msg,payload)
If the message is to be sent asynchronous the application can be notified of completion and errors by passing in an error handler attached to a payload object.
The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten to simulate a message sent from another node.- Specified by:
sendMessage
in interfaceChannelInterceptor
- Overrides:
sendMessage
in classChannelInterceptorBase
- Parameters:
destination
- Member[] - the destination for this messagemsg
- ChannelMessage - the message to be sentpayload
- InterceptorPayload - the payload, carrying an error handler and future useful data, can be null- Throws:
ChannelException
- if a serialization error happens.- See Also:
ErrorHandler
,InterceptorPayload
-
messageReceived
public void messageReceived(ChannelMessage msg)
Description copied from interface:ChannelInterceptor
themessageReceived
is invoked when a message is received.ChannelMessage.getAddress()
is the sender, or the reply-to address if it has been overwritten.- Specified by:
messageReceived
in interfaceChannelInterceptor
- Overrides:
messageReceived
in classChannelInterceptorBase
- Parameters:
msg
- ChannelMessage
-
setEncryptionAlgorithm
public void setEncryptionAlgorithm(java.lang.String algorithm)
Sets the encryption algorithm to be used for encrypting and decrypting channel messages. You must specify thealgorithm/mode/padding
. Information on standard algorithm names may be found in the Java documentation. Default isAES/CBC/PKCS5Padding
.- Specified by:
setEncryptionAlgorithm
in interfaceEncryptInterceptorMBean
- Parameters:
algorithm
- The algorithm to use.
-
getEncryptionAlgorithm
public java.lang.String getEncryptionAlgorithm()
Gets the encryption algorithm being used to encrypt and decrypt channel messages.- Specified by:
getEncryptionAlgorithm
in interfaceEncryptInterceptorMBean
- Returns:
- The algorithm being used, including the algorithm mode and padding.
-
setEncryptionKey
public void setEncryptionKey(byte[] key)
Sets the encryption key for encryption and decryption. The length of the key must be appropriate for the algorithm being used.- Specified by:
setEncryptionKey
in interfaceEncryptInterceptorMBean
- Parameters:
key
- The encryption key.
-
setEncryptionKey
public void setEncryptionKey(java.lang.String keyBytes)
Gets the encryption key being used for encryption and decryption. The key is encoded using hex-encoding where e.g. the byte0xab
will be shown as "ab". The length of the string in characters will be twice the length of the key in bytes.- Parameters:
keyBytes
- The encryption key.
-
getEncryptionKey
public byte[] getEncryptionKey()
Gets the encryption key being used for encryption and decryption.- Specified by:
getEncryptionKey
in interfaceEncryptInterceptorMBean
- Returns:
- The encryption key.
-
getEncryptionKeyString
public java.lang.String getEncryptionKeyString()
-
setEncryptionKeyString
public void setEncryptionKeyString(java.lang.String encryptionKeyString)
-
setProviderName
public void setProviderName(java.lang.String provider)
Sets the JCA provider name used for cryptographic activities. Default is the JVM platform default.- Specified by:
setProviderName
in interfaceEncryptInterceptorMBean
- Parameters:
provider
- The name of the JCA provider.
-
getProviderName
public java.lang.String getProviderName()
Gets the JCA provider name used for cryptographic activities. Default is the JVM platform default.- Specified by:
getProviderName
in interfaceEncryptInterceptorMBean
- Returns:
- The name of the JCA provider.
-
-