thrift服務端獲取客戶端ip地址。

<pre name="code" class="java">public class TProcessorMng implements TProcessor {
	private TProcessor processor;
	
	public TProcessorMng(TProcessor processor) {
		this.processor = processor;
	}

	public boolean process(TProtocol in, TProtocol out) throws TException {
		TTransport t = in.getTransport();
		InetAddress ia = t instanceof TSocket ? ((TSocket) t).getSocket().getInetAddress() : null;
		// Now you have the IP address, so what ever you want.
		System.out.println(ia);
		MaizuoConfig serverConfig=MaizuoConfig.getInstance();
		String ipList = serverConfig.getConfig().getString("ipList");
		List<String> limitIp = new ArrayList<String>();
		String[] strs=ipList.split(",");
		for(String substr:strs){
			limitIp.add(substr);
		}
		String reqIp = ia.toString().replace("/", "");
		// Delegate to the processor we are decorating.
		if (!limitIp.contains(reqIp)) {
			MaizuoLogUtil.writeLog(22+"", 22+"", "", "IP:", 
					reqIp+"", "不在ip羣中.", "1");
			System.out.println("ip錯誤,禁止訪問.");
			return false;
		}
		System.out.println("ip正確.");
		return processor.process(in, out);
	}

}

	/**
	 * 多線程服務器端使用標準的堵塞式I/O
	 */
	public void startPoolServer() 
	{      
		try {   
				MaizuoConfig serverConfig=MaizuoConfig.getInstance("editorbase");
				int port = serverConfig.getConfig().getInt("serverPort");
			    TServerSocket serverTransport = new TServerSocket(port); 
			    System.out.println("serverPort:" + port);
			    
			    EditorService.Processor process = new EditorService.Processor(new EditorProcess());
			    Factory portFactory = new TBinaryProtocol.Factory(true, true);  
			    TProcessor tpm = new TProcessorMng(process);
			    
			    Args args = new Args(serverTransport);
			    args.processor(tpm);     
			    args.protocolFactory(portFactory);   
			    args.maxWorkerThreads = serverConfig.getConfig().getInt("maxWorkerThreads");
			    args.minWorkerThreads = serverConfig.getConfig().getInt("minWorkerThreads");
			    System.out.println("maxWorkerThreads:" + args.maxWorkerThreads + "minWorkerThreads:" + args.minWorkerThreads);
			    TServer server = new TThreadPoolServer(args);  
			    System.out.println("editorserver is startup success!");
			    server.serve();
                
             } catch (TTransportException e) 
             {
                   e.printStackTrace();         
             }
	}




在構造該函數的時候,process會自動運行。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章