Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
接上一篇: http://618119.com/archives/2007/12/06/39.html为 DefaultIoFilterChainBuilder 增加filter:
view plaincopy to clipboardprint?
[*]import org.apache.mina.filter.LoggingFilter;
[*]import javax.net.ssl.SSLContext;
[*]import org.apache.mina.filter.SSLFilter;
[*]import org.apache.mina.common.DefaultIoFilterChainBuilder;
[*]import org.apache.mina.filter.codec.ProtocolCodecFilter;
[*]import org.apache.commons.ssl.*;
[*]import java.io.*;
[*]import java.security.*;
[*]import com.lizongbo.ssl.SMPPSSLContextFactory;
[*]import com.lizongbo.smpp.server.codec.SMPPProtocolCodecFactory;
[*]public static final int PORT = 5432;
[*]public static final int CONNECT_TIMEOUT = 3; // seconds
[*]private static final boolean USE_SSL = true;
[*]private static final boolean USE_LOG = false;
[*]private static final boolean USE_COMPRESS = false;
[*]private static final boolean USE_THREADPOOL = false;
[*]/**
[*]添加服务端的ssl支持
[*]*/
[*]public static void addServerSSLSupport(DefaultIoFilterChainBuilder chain) throws
[*]Exception {
[*]if (USE_SSL) {
[*]SSLContext sslc = SMPPSSLContextFactory.getInstance(true);
[*]SSLFilter sslFilter = new SSLFilter(sslc);
[*]sslFilter.setNeedClientAuth(true);//
[*]//sslFilter.setWantClientAuth(true);
[*]sslFilter.setEnabledCipherSuites(new String[] {
[*]“TLS_RSA_WITH_AES_256_CBC_SHA”
[*]“SSL_RSA_WITH_RC4_128_MD5″//,
[*]“TLS_RSA_WITH_AES_128_CBC_SHA”,
[*]“TLS_DHE_RSA_WITH_AES_128_CBC_SHA”,
[*]“TLS_DHE_DSS_WITH_AES_128_CBC_SHA”,
[*]“TLS_RSA_WITH_AES_256_CBC_SHA”,
[*]“TLS_DHE_RSA_WITH_AES_256_CBC_SHA”,
[*]“SSL_RSA_WITH_RC4_128_SHA”,
[*]“TLS_DHE_DSS_WITH_AES_256_CBC_SHA”
[*]});
[*]chain.addLast(”sslFilter”, sslFilter);
[*]System.out.println(”Server SSL ON”);
[*]}
[*]}
[*]/**
[*]添加客户端的ssl支持
[*]*/
[*]public static void addCilentSSLSupport(DefaultIoFilterChainBuilder chain) throws
[*]Exception {
[*]if (USE_SSL) {
[*]SSLContext sslc = SMPPSSLContextFactory.getInstance(false);
[*]SSLFilter sslFilter = new SSLFilter(sslc);
[*]sslFilter.setUseClientMode(true);
[*]chain.addLast(”sslFilter”, sslFilter);
[*]System.out.println(”Client SSL ON”);
[*]}
[*]}
[*]/**
[*]添加 logger 过滤器
[*]*/
[*]public static void addLogger(DefaultIoFilterChainBuilder chain) throws
[*]Exception {
[*]if (USE_LOG) {
[*]chain.addLast(”logger”, new LoggingFilter());
[*]System.out.println(”Logging ON”);
[*]}
[*]}
[*]/**
[*]添加压缩 过滤器
[*]*/
[*]public static void addCompress(DefaultIoFilterChainBuilder chain) throws
[*]Exception {
[*]if (USE_COMPRESS) {
[*]chain.addLast(”compress”, new org.apache.mina.filter.CompressionFilter());
[*]System.out.println(”Compress ON”);
[*]}
[*]}
[*]/**
[*]添加编码解码过滤器
[*]*/
[*]public static void addCodec(DefaultIoFilterChainBuilder chain) throws
[*]Exception {
[*]chain.addLast(”codec”,
[*]new ProtocolCodecFilter(new SMPPProtocolCodecFactory()));
[*]}
[*]/**
[*]添加线程池过滤器
[*]*/
[*]public static void addThreadPool(DefaultIoFilterChainBuilder chain) throws
[*]Exception {
[*]if (USE_THREADPOOL) {
[*]chain.addLast(”threadpool”,
[*]new org.apache.mina.filter.executor.ExecutorFilter());
[*]System.out.println(”Threadpool ON”);
[*]}
[*]}
[*]public static void main(String[] args) throws IOException, Exception {
[*]IoAcceptor acceptor = new SocketAcceptor();
[*]IoAcceptorConfig config = new SocketAcceptorConfig();
[*]DefaultIoFilterChainBuilder chain = config.getFilterChain();
[*]//Utils.addServerSSLSupport(chain);
[*]Utils.addThreadPool(chain);
[*]Utils.addCompress(chain);
[*]Utils.addCodec(chain);
[*]Utils.addLogger(chain);
[*]SMPPServerSessionHandler handlers = new SMPPServerSessionHandler();
[*]handlers.getHandles().put(Integer.valueOf(0×00000001),
[*]new com.lizongbo.smpp.server.handlers.
[*]BindReceiverHandler());
[*]handlers.getHandles().put(Integer.valueOf(0×00000002),
[*]new com.lizongbo.smpp.server.handlers.
[*]BindTransmitterHandler());
[*]handlers.getHandles().put(Integer.valueOf(0×00000004),
[*]new com.lizongbo.smpp.server.handlers.
[*]SubmitSMHandler());
[*]handlers.getHandles().put(Integer.valueOf(0×00000006),
[*]new com.lizongbo.smpp.server.handlers.
[*]UnbindHandler());
[*]InetSocketAddress serverAddr = new InetSocketAddress(Utils.PORT);
[*]acceptor.bind(
[*]serverAddr, handlers,
[*]config);
[*]//JMX控制
[*]IoServiceManager serviceManager = new IoServiceManager(acceptor);
[*]serviceManager.startCollectingStats(1000);
[*]MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
[*]ObjectName name = new ObjectName(
[*]“com.lizongbo.smpp.server:type=IoServiceManager”);
[*]mbs.registerMBean(serviceManager, name);
[*]System.out.println(”Listening on port ” + Utils.PORT);
[*]}
页:
[1]