Package org.apache.mina.filter.ssl
Class SslFilter
- java.lang.Object
-
- org.apache.mina.core.filterchain.IoFilterAdapter
-
- org.apache.mina.filter.ssl.SslFilter
-
- All Implemented Interfaces:
IoFilter
public class SslFilter extends IoFilterAdapter
A SSL processor which performs flow control of encrypted information on the filter-chain.The initial handshake is automatically enabled for "client" sessions once the filter is added to the filter-chain and the session is connected.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface org.apache.mina.core.filterchain.IoFilter
IoFilter.NextFilter
-
-
Field Summary
Fields Modifier and Type Field Description private booleanautoStartA flag used to tell the filter to start the handshake immediately (in onPostAdd method) alternatively handshake will be started after session is connected (in sessionOpened method) default value is trueprotected java.lang.String[]enabledCipherSuitesThe enabled Ciphers.protected java.lang.String[]enabledProtocolsThe list of enabled SSL/TLS protocols.protected static java.util.concurrent.ExecutorEXECUTORTask executor for processing handshakesprivate java.lang.StringidentificationAlgorithmEndPoint identification algorithmsprotected static org.slf4j.LoggerLOGGERThe loggerprotected booleanneedClientAuthA flag set if client authentication is requiredprivate booleannonBlockingPipelineEnables the non-blocking pipelinesprotected static AttributeKeySSL_HANDLERReturns the SSL2Handler objectstatic AttributeKeySSL_SECUREDSSLSession object when the session is secured, otherwise null.protected javax.net.ssl.SSLContextsslContextprotected booleanwantClientAuthA flag set if client authentication is requested
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected javax.net.ssl.SSLEnginecreateEngine(IoSession session, java.net.InetSocketAddress addr)Customization handler for creating the enginevoidfilterWrite(IoFilter.NextFilter next, IoSession session, WriteRequest request)FiltersIoSession.write(Object)method invocation.java.lang.String[]getEnabledCipherSuites()java.lang.String[]getEnabledProtocols()java.lang.StringgetEndpointIdentificationAlgorithm()private SslHandlergetSslHandler(IoSession session)Gets the given session's SslHandler.booleanisNeedClientAuth()booleanisWantClientAuth()voidmessageReceived(IoFilter.NextFilter next, IoSession session, java.lang.Object message)FiltersIoHandler.messageReceived(IoSession,Object)event.voidmessageSent(IoFilter.NextFilter next, IoSession session, WriteRequest request)FiltersIoHandler.messageSent(IoSession,Object)event.protected voidonClose(IoFilter.NextFilter next, IoSession session, boolean linger)Called when the session is going to be closed.protected voidonConnected(IoFilter.NextFilter next, IoSession session)Internal method for performing post-connect operations; this can be triggered during normal connect event or after the filter is added to the chain.voidonPostAdd(IoFilterChain parent, java.lang.String name, IoFilter.NextFilter next)Invoked after this filter is added to the specifiedparent.voidonPreAdd(IoFilterChain parent, java.lang.String name, IoFilter.NextFilter next)Invoked before this filter is added to the specifiedparent.voidonPreRemove(IoFilterChain parent, java.lang.String name, IoFilter.NextFilter next)Invoked before this filter is removed from the specifiedparent.voidsessionClosed(IoFilter.NextFilter next, IoSession session)FiltersIoHandler.sessionClosed(IoSession)event.voidsessionOpened(IoFilter.NextFilter next, IoSession session)FiltersIoHandler.sessionOpened(IoSession)event.voidsetEnabledCipherSuites(java.lang.String... enabledCipherSuites)Sets the list of cipher suites to be enabled whenSSLEngineis initialized.voidsetEnabledProtocols(java.lang.String... enabledProtocols)Sets the list of protocols to be enabled whenSSLEngineis initialized.voidsetEndpointIdentificationAlgorithm(java.lang.String identificationAlgorithm)Sets the endpoint identification algorithm to be used whenSSLEngineis initialized.voidsetNeedClientAuth(boolean needClientAuth)Configures the engine to require client authentication.voidsetUseNonBlockingPipeline(boolean enable)Configures the use of the Non Blocking SSL processor.voidsetWantClientAuth(boolean wantClientAuth)Configures the engine to request client authentication.-
Methods inherited from class org.apache.mina.core.filterchain.IoFilterAdapter
destroy, event, exceptionCaught, filterClose, init, inputClosed, onPostRemove, sessionCreated, sessionIdle, toString
-
-
-
-
Field Detail
-
SSL_SECURED
public static final AttributeKey SSL_SECURED
SSLSession object when the session is secured, otherwise null.
-
SSL_HANDLER
protected static final AttributeKey SSL_HANDLER
Returns the SSL2Handler object
-
LOGGER
protected static final org.slf4j.Logger LOGGER
The logger
-
EXECUTOR
protected static final java.util.concurrent.Executor EXECUTOR
Task executor for processing handshakes
-
sslContext
protected final javax.net.ssl.SSLContext sslContext
-
autoStart
private final boolean autoStart
A flag used to tell the filter to start the handshake immediately (in onPostAdd method) alternatively handshake will be started after session is connected (in sessionOpened method) default value is true
-
nonBlockingPipeline
private boolean nonBlockingPipeline
Enables the non-blocking pipelines
-
needClientAuth
protected boolean needClientAuth
A flag set if client authentication is required
-
wantClientAuth
protected boolean wantClientAuth
A flag set if client authentication is requested
-
enabledCipherSuites
protected java.lang.String[] enabledCipherSuites
The enabled Ciphers.
-
enabledProtocols
protected java.lang.String[] enabledProtocols
The list of enabled SSL/TLS protocols. Must be an array of String, containing:- SSLv2Hello
- SSLv3
- TLSv1.1 or TLSv1
- TLSv1.2
- TLSv1.3
- NONE
-
identificationAlgorithm
private java.lang.String identificationAlgorithm
EndPoint identification algorithms
-
-
Constructor Detail
-
SslFilter
public SslFilter(javax.net.ssl.SSLContext sslContext)
Creates a new SSL filter using the specifiedSSLContext.- Parameters:
sslContext- The SSLContext to use
-
SslFilter
public SslFilter(javax.net.ssl.SSLContext sslContext, boolean autoStart)Creates a new SSL filter using the specifiedSSLContext. If theautostartflag is set totrue, the handshake will start immediately after the filter has been added to the chain.- Parameters:
sslContext- The SSLContext to useautoStart- The flag used to tell the filter to start the handshake immediately
-
-
Method Detail
-
setUseNonBlockingPipeline
public void setUseNonBlockingPipeline(boolean enable)
Configures the use of the Non Blocking SSL processor. This is experimental.- Parameters:
enable-trueif the non blocking SSL processor is enabled
-
isNeedClientAuth
public boolean isNeedClientAuth()
- Returns:
trueif the engine will require client authentication. This option is only useful to engines in the server mode.
-
setNeedClientAuth
public void setNeedClientAuth(boolean needClientAuth)
Configures the engine to require client authentication. This option is only useful for engines in the server mode.- Parameters:
needClientAuth- A flag set when client authentication is required
-
isWantClientAuth
public boolean isWantClientAuth()
- Returns:
trueif the engine will request client authentication. This option is only useful to engines in the server mode.
-
setWantClientAuth
public void setWantClientAuth(boolean wantClientAuth)
Configures the engine to request client authentication. This option is only useful for engines in the server mode.- Parameters:
wantClientAuth- A flag set when client authentication is requested
-
getEnabledCipherSuites
public java.lang.String[] getEnabledCipherSuites()
- Returns:
- the list of cipher suites to be enabled when
SSLEngineis initialized.nullmeans 'useSSLEngine's default.'
-
setEnabledCipherSuites
public void setEnabledCipherSuites(java.lang.String... enabledCipherSuites)
Sets the list of cipher suites to be enabled whenSSLEngineis initialized.- Parameters:
enabledCipherSuites- The list of enabled Cipher.nullmeans 'useSSLEngine's default.'
-
getEndpointIdentificationAlgorithm
public java.lang.String getEndpointIdentificationAlgorithm()
- Returns:
- the endpoint identification algorithm to be used when
SSLEngineis initialized.nullmeans 'useSSLEngine's default.'
-
setEndpointIdentificationAlgorithm
public void setEndpointIdentificationAlgorithm(java.lang.String identificationAlgorithm)
Sets the endpoint identification algorithm to be used whenSSLEngineis initialized.- Parameters:
identificationAlgorithm-nullmeans 'useSSLEngine's default.'
-
getEnabledProtocols
public java.lang.String[] getEnabledProtocols()
- Returns:
- the list of protocols to be enabled when
SSLEngineis initialized.nullmeans 'useSSLEngine's default.'
-
getSslHandler
private SslHandler getSslHandler(IoSession session)
Gets the given session's SslHandler.- Parameters:
session- An IoSession to query.- Returns:
- the given session's SslHandler.
-
setEnabledProtocols
public void setEnabledProtocols(java.lang.String... enabledProtocols)
Sets the list of protocols to be enabled whenSSLEngineis initialized.- Parameters:
enabledProtocols- The list of enabled SSL/TLS protocols.nullmeans 'useSSLEngine's default.'
-
onPreAdd
public void onPreAdd(IoFilterChain parent, java.lang.String name, IoFilter.NextFilter next) throws java.lang.Exception
Invoked before this filter is added to the specifiedparent. Please note that this method can be invoked more than once if this filter is added to more than one parents. This method is not invoked beforeIoFilter.init()is invoked.- Specified by:
onPreAddin interfaceIoFilter- Overrides:
onPreAddin classIoFilterAdapter- Parameters:
parent- the parent who called this methodname- the name assigned to this filternext- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.- Throws:
java.lang.Exception- If an error occurred while processing the event
-
onPostAdd
public void onPostAdd(IoFilterChain parent, java.lang.String name, IoFilter.NextFilter next) throws java.lang.Exception
Invoked after this filter is added to the specifiedparent. Please note that this method can be invoked more than once if this filter is added to more than one parents. This method is not invoked beforeIoFilter.init()is invoked.- Specified by:
onPostAddin interfaceIoFilter- Overrides:
onPostAddin classIoFilterAdapter- Parameters:
parent- the parent who called this methodname- the name assigned to this filternext- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.- Throws:
java.lang.Exception- If an error occurred while processing the event
-
onPreRemove
public void onPreRemove(IoFilterChain parent, java.lang.String name, IoFilter.NextFilter next) throws java.lang.Exception
Invoked before this filter is removed from the specifiedparent. Please note that this method can be invoked more than once if this filter is removed from more than one parents. This method is always invoked beforeIoFilter.destroy()is invoked.- Specified by:
onPreRemovein interfaceIoFilter- Overrides:
onPreRemovein classIoFilterAdapter- Parameters:
parent- the parent who called this methodname- the name assigned to this filternext- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.- Throws:
java.lang.Exception- If an error occurred while processing the event
-
onConnected
protected void onConnected(IoFilter.NextFilter next, IoSession session) throws javax.net.ssl.SSLException
Internal method for performing post-connect operations; this can be triggered during normal connect event or after the filter is added to the chain.- Parameters:
next- The nextFilter to call in the chainsession- The session instance- Throws:
javax.net.ssl.SSLException- Any exception thrown by the SslHandler closing
-
onClose
protected void onClose(IoFilter.NextFilter next, IoSession session, boolean linger) throws javax.net.ssl.SSLException
Called when the session is going to be closed. We must shutdown the SslHandler instance.- Parameters:
next- The nextFilter to call in the chainsession- The session instancelinger- if true, write any queued messages before closing- Throws:
javax.net.ssl.SSLException- Any exception thrown by the SslHandler closing
-
createEngine
protected javax.net.ssl.SSLEngine createEngine(IoSession session, java.net.InetSocketAddress addr)
Customization handler for creating the engine- Parameters:
session- source sessionaddr- socket address used for fast reconnect- Returns:
- an SSLEngine
-
sessionOpened
public void sessionOpened(IoFilter.NextFilter next, IoSession session) throws java.lang.Exception
FiltersIoHandler.sessionOpened(IoSession)event.- Specified by:
sessionOpenedin interfaceIoFilter- Overrides:
sessionOpenedin classIoFilterAdapter- Parameters:
next- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.session- TheIoSessionwhich has received this event- Throws:
java.lang.Exception- If an error occurred while processing the event
-
sessionClosed
public void sessionClosed(IoFilter.NextFilter next, IoSession session) throws java.lang.Exception
FiltersIoHandler.sessionClosed(IoSession)event.- Specified by:
sessionClosedin interfaceIoFilter- Overrides:
sessionClosedin classIoFilterAdapter- Parameters:
next- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.session- TheIoSessionwhich has received this event- Throws:
java.lang.Exception- If an error occurred while processing the event
-
messageReceived
public void messageReceived(IoFilter.NextFilter next, IoSession session, java.lang.Object message) throws java.lang.Exception
FiltersIoHandler.messageReceived(IoSession,Object)event.- Specified by:
messageReceivedin interfaceIoFilter- Overrides:
messageReceivedin classIoFilterAdapter- Parameters:
next- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.session- TheIoSessionwhich has received this eventmessage- The received message- Throws:
java.lang.Exception- If an error occurred while processing the event
-
messageSent
public void messageSent(IoFilter.NextFilter next, IoSession session, WriteRequest request) throws java.lang.Exception
FiltersIoHandler.messageSent(IoSession,Object)event.- Specified by:
messageSentin interfaceIoFilter- Overrides:
messageSentin classIoFilterAdapter- Parameters:
next- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.session- TheIoSessionwhich has received this eventrequest- TheWriteRequestthat contains the sent message- Throws:
java.lang.Exception- If an error occurred while processing the event
-
filterWrite
public void filterWrite(IoFilter.NextFilter next, IoSession session, WriteRequest request) throws java.lang.Exception
FiltersIoSession.write(Object)method invocation.- Specified by:
filterWritein interfaceIoFilter- Overrides:
filterWritein classIoFilterAdapter- Parameters:
next- theIoFilter.NextFilterfor this filter. You can reuse this object until this filter is removed from the chain.session- TheIoSessionwhich has to process this invocationrequest- TheWriteRequestto process- Throws:
java.lang.Exception- If an error occurred while processing the event
-
-