2
* JBoss, Home of Professional Open Source
4
package org.jboss.remoting.security;
6
import java.io.IOException;
7
import java.net.InetAddress;
8
import java.net.ServerSocket;
9
import java.security.AccessController;
10
import java.security.PrivilegedAction;
12
import javax.net.ssl.SSLServerSocket;
13
import javax.net.ssl.SSLServerSocketFactory;
16
* SSL server socket factory whose configuration is customized.
18
* @author <a href="mailto:mazz@jboss.com">John Mazzitelli</a>
19
* @version $Revision: 3839 $
21
public class CustomSSLServerSocketFactory
22
extends SSLServerSocketFactory
24
private SSLServerSocketFactory theDelegate;
25
private SSLSocketBuilderMBean theBuilder;
28
* Constructor for {@link CustomSSLServerSocketFactory}. The factory can be <code>null</code> - call
29
* {@link #setFactory(SSLServerSocketFactory)} to set it later.
31
* @param factory the true factory this class delegates to
32
* @param builder the class that built this custom factory - contains all the configuration for this factory
34
public CustomSSLServerSocketFactory( SSLServerSocketFactory factory,
35
SSLSocketBuilderMBean builder )
39
theDelegate = factory;
42
public CustomSSLServerSocketFactory()
48
* Sets the builder that creates the true socket server factory.
49
* @param sslSocketBuilder
51
public void setSSLSocketBuilder(SSLSocketBuilderMBean sslSocketBuilder)
53
this.theBuilder = sslSocketBuilder;
57
* Returns the builder that created this factory. You can obtain the configuration of this factory
58
* by examining the returned object's configuration.
62
public SSLSocketBuilderMBean getSSLSocketBuilder()
68
* Sets a new factory in this object - this is the factory that this object will use to create new sockets.
70
* @param factory the new factory
72
* @throws IllegalArgumentException if factory is <code>null</code>
74
public void setFactory( SSLServerSocketFactory factory )
76
if ( factory == null )
78
throw new IllegalArgumentException( "Factory cannot be null" );
81
theDelegate = factory;
85
* @see javax.net.ServerSocketFactory#createServerSocket()
87
public ServerSocket createServerSocket()
90
SSLServerSocket sock = (SSLServerSocket) theDelegate.createServerSocket();
91
setSocketModes( sock );
96
* @see javax.net.ServerSocketFactory#createServerSocket(int)
98
public ServerSocket createServerSocket( int port )
101
SSLServerSocket sock = (SSLServerSocket) theDelegate.createServerSocket( port );
102
setSocketModes( sock );
107
* @see javax.net.ServerSocketFactory#createServerSocket(int, int)
109
public ServerSocket createServerSocket( int port,
113
SSLServerSocket sock = (SSLServerSocket) theDelegate.createServerSocket( port, backlog );
114
setSocketModes( sock );
119
* @see javax.net.ServerSocketFactory#createServerSocket(int, int, java.net.InetAddress)
121
public ServerSocket createServerSocket( int port,
123
InetAddress ifAddress )
126
SSLServerSocket sock = (SSLServerSocket) theDelegate.createServerSocket( port, backlog, ifAddress );
127
setSocketModes( sock );
132
* @see javax.net.ssl.SSLServerSocketFactory#getDefaultCipherSuites()
134
public String[] getDefaultCipherSuites()
136
return theDelegate.getDefaultCipherSuites();
140
* @see javax.net.ssl.SSLServerSocketFactory#getSupportedCipherSuites()
142
public String[] getSupportedCipherSuites()
144
return theDelegate.getSupportedCipherSuites();
148
* @see java.lang.Object#equals(java.lang.Object)
150
public boolean equals( Object obj )
152
return theDelegate.equals( obj );
156
* @see java.lang.Object#hashCode()
158
public int hashCode()
160
return theDelegate.hashCode();
164
* @see java.lang.Object#toString()
166
public String toString()
168
return theDelegate.toString();
172
* Sets the socket modes according to the custom configuration.
174
* @param sock the socket whose modes are to be set
176
private void setSocketModes( SSLServerSocket sock )
178
if ( theBuilder != null )
181
boolean isServerSocketUseClientMode = ((Boolean)AccessController.doPrivileged( new PrivilegedAction()
185
return new Boolean(theBuilder.isServerSocketUseClientMode());
189
boolean isClientAuthModeWant = ((Boolean)AccessController.doPrivileged( new PrivilegedAction()
193
return new Boolean(theBuilder.isClientAuthModeWant());
197
boolean isClientAuthModeNeed = ((Boolean)AccessController.doPrivileged( new PrivilegedAction()
201
return new Boolean(theBuilder.isClientAuthModeNeed());
205
sock.setUseClientMode( isServerSocketUseClientMode );
207
if ( isClientAuthModeWant )
209
sock.setNeedClientAuth( false );
210
sock.setWantClientAuth( true );
212
else if ( isClientAuthModeNeed )
214
sock.setWantClientAuth( false );
215
sock.setNeedClientAuth( true );
219
sock.setWantClientAuth( false );
220
sock.setNeedClientAuth( false );
b'\\ No newline at end of file'