标签:
HttpClient官方文档:http://hc.apache.org/
/* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ package com.ndkey.auditproxy.generalhttp; import com.ndkey.auditproxy.AuditProxy; import com.ndkey.auditproxy.AuditProxyException; import com.ndkey.auditproxy.LoginRequest; import com.ndkey.auditproxy.LogoutRequest; import com.ndkey.auditproxy.config.TimeoutConfig; import com.ndkey.config.ConfigType; import com.ndkey.net.MacAddress; import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.util.List; import java.util.Map; import org.apache.commons.codec.binary.Hex; import org.apache.commons.lang.time.FastDateFormat; import org.apache.commons.codec.digest.DigestUtils; import org.apache.http.NameValuePair; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.client.methods.HttpPost; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.message.BasicNameValuePair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * * @author zxf */ public class GeneralHttpProxy implements AuditProxy { private static final FastDateFormat DATE_FORMAT = FastDateFormat.getInstance("yyyy-MM-dd‘ ‘HH:mm:ss"); private final Logger _logger = LoggerFactory.getLogger(this.getClass()); private static final List<ConfigType> CONFIG_TYPES = new LinkedList<ConfigType>(); private Map<String, String> configs = new HashMap<String, String>(); private CloseableHttpClient httpClient = null; static { CONFIG_TYPES.add(new AddressConfig()); CONFIG_TYPES.add(new SecretKeyConfig()); CONFIG_TYPES.add(new TimeoutConfig()); } public void setAddress(String address) { configs.put(AddressConfig.UUID, address); } public String getAddress() { return AddressConfig.getValue(configs); } public void setSecretKey(String secretKey) { configs.put(SecretKeyConfig.UUID, secretKey); } public String getSecretKey() { return SecretKeyConfig.getValue(configs); } public void setTimeout(int timeout) { configs.put(TimeoutConfig.UUID, String.valueOf(timeout)); } public int getTimeout() { return TimeoutConfig.getValue(configs); } @Override public String getName() { return "通用HTTP代理"; } @Override public void init() throws AuditProxyException { httpClient = HttpClients.createDefault(); } @Override public void destroy() { try { httpClient.close(); } catch (IOException ex) { _logger.error("关闭httpClient失败", ex); } } @Override public List<ConfigType> getConfigTypes() { return CONFIG_TYPES; } @Override public Map<String, String> getConfigs() { return configs; } @Override public void setConfigs(Map<String, String> configs) { this.configs = configs; for (ConfigType type : getConfigTypes()) { if (!this.configs.containsKey(type.getUuid())) { this.configs.put(type.getUuid(), type.getDefaultValue()); } } } @Override public void auditLogin(LoginRequest request) throws AuditProxyException { try { List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("tyep", "login")); nvps.add(new BasicNameValuePair("userName", request.getUserName())); nvps.add(new BasicNameValuePair("userIp", request.getUserIp().getHostAddress())); String userMac = MacAddress.parseMacAddress(Hex.encodeHexString(request.getUserMac())).getAddress(); nvps.add(new BasicNameValuePair("userMac", userMac)); String time = DATE_FORMAT.format(request.getTime()); nvps.add(new BasicNameValuePair("time", time)); String signature = DigestUtils.shaHex(time + getSecretKey()); nvps.add(new BasicNameValuePair("signature", signature)); sendMessage(nvps); } catch (IOException ex) { throw new AuditProxyException(ex); } } @Override public void auditLogout(LogoutRequest request) throws AuditProxyException { try { List<NameValuePair> nvps = new ArrayList<NameValuePair>(); nvps.add(new BasicNameValuePair("tyep", "logout")); nvps.add(new BasicNameValuePair("userName", request.getUserName())); nvps.add(new BasicNameValuePair("userIp", request.getUserIp().getHostAddress())); String time = DATE_FORMAT.format(request.getTime()); nvps.add(new BasicNameValuePair("time", time)); String signature = DigestUtils.shaHex(time + getSecretKey()); nvps.add(new BasicNameValuePair("signature", signature)); sendMessage(nvps); } catch (IOException ex) { throw new AuditProxyException(ex); } } protected void sendMessage(List<NameValuePair> nvps) throws IOException { try { HttpPost httpPost = new HttpPost(getAddress()); httpPost.setConfig(RequestConfig.custom().setConnectionRequestTimeout(getTimeout() * 1000) .setConnectTimeout(getTimeout() * 1000).build()); httpPost.setEntity(new UrlEncodedFormEntity(nvps)); httpClient.execute(httpPost); } catch (IOException e) { _logger.error(e.getMessage()); throw new IOException(e); } } }
标签:
原文地址:http://www.cnblogs.com/littlehoom/p/4898665.html