工具类
package net.xdclass.xdvideo.utils; import java.security.MessageDigest; import java.util.UUID; /** * 常用工具类的封装,md5,uuid等 */ public class CommonUtils { /** * 生成 uuid, 即用来标识一笔单,也用做 nonce_str * @return */ public static String generateUUID(){ String uuid = UUID.randomUUID().toString(). replaceAll("-","").substring(0,32); return uuid; } /** * md5常用工具类 * @param data * @return */ public static String MD5(String data){ try { MessageDigest md5 = MessageDigest.getInstance("MD5"); byte [] array = md5.digest(data.getBytes("UTF-8")); StringBuilder sb = new StringBuilder(); for (byte item : array) { sb.append(Integer.toHexString((item & 0xFF) | 0x100).substring(1, 3)); } return sb.toString().toUpperCase(); }catch (Exception e){ e.printStackTrace(); } return null; } }
package net.xdclass.xdvideo.utils; import com.google.gson.Gson; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.config.RequestConfig; import org.apache.http.client.methods.CloseableHttpResponse; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.CloseableHttpClient; import org.apache.http.impl.client.HttpClients; import org.apache.http.util.EntityUtils; import java.util.HashMap; import java.util.Map; /** * 封装http get post */ public class HttpUtils { private static final Gson gson = new Gson(); /** * get方法 * @param url * @return */ public static Map<String,Object> doGet(String url){ Map<String,Object> map = new HashMap<>(); CloseableHttpClient httpClient = HttpClients.createDefault(); RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(5000) //连接超时 .setConnectionRequestTimeout(5000)//请求超时 .setSocketTimeout(5000) .setRedirectsEnabled(true) //允许自动重定向 .build(); HttpGet httpGet = new HttpGet(url); httpGet.setConfig(requestConfig); try{ HttpResponse httpResponse = httpClient.execute(httpGet); if(httpResponse.getStatusLine().getStatusCode() == 200){ String jsonResult = EntityUtils.toString( httpResponse.getEntity()); map = gson.fromJson(jsonResult,map.getClass()); } }catch (Exception e){ e.printStackTrace(); }finally { try { httpClient.close(); }catch (Exception e){ e.printStackTrace(); } } return map; } /** * 封装post * @return */ public static String doPost(String url, String data,int timeout){ CloseableHttpClient httpClient = HttpClients.createDefault(); //超时设置 RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(timeout) //连接超时 .setConnectionRequestTimeout(timeout)//请求超时 .setSocketTimeout(timeout) .setRedirectsEnabled(true) //允许自动重定向 .build(); HttpPost httpPost = new HttpPost(url); httpPost.setConfig(requestConfig); httpPost.addHeader("Content-Type","text/html; chartset=UTF-8"); if(data != null && data instanceof String){ //使用字符串传参 StringEntity stringEntity = new StringEntity(data,"UTF-8"); httpPost.setEntity(stringEntity); } try{ CloseableHttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); if(httpResponse.getStatusLine().getStatusCode() == 200){ String result = EntityUtils.toString(httpEntity); return result; } }catch (Exception e){ e.printStackTrace(); }finally { try{ httpClient.close(); }catch (Exception e){ e.printStackTrace(); } } return null; } }
package net.xdclass.xdvideo.utils; import java.net.InetAddress; import java.net.UnknownHostException; import javax.servlet.http.HttpServletRequest; public class IpUtils { public static String getIpAddr(HttpServletRequest request) { String ipAddress = null; try { ipAddress = request.getHeader("x-forwarded-for"); if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getHeader("WL-Proxy-Client-IP"); } if (ipAddress == null || ipAddress.length() == 0 || "unknown".equalsIgnoreCase(ipAddress)) { ipAddress = request.getRemoteAddr(); if (ipAddress.equals("127.0.0.1")) { // 根据网卡取本机配置的IP InetAddress inet = null; try { inet = InetAddress.getLocalHost(); } catch (UnknownHostException e) { e.printStackTrace(); } ipAddress = inet.getHostAddress(); } } // 对于通过多个代理的情况,第一个IP为客户端真实IP,多个IP按照','分割 if (ipAddress != null && ipAddress.length() > 15) { // "***.***.***.***".length() // = 15 if (ipAddress.indexOf(",") > 0) { ipAddress = ipAddress.substring(0, ipAddress.indexOf(",")); } } } catch (Exception e) { ipAddress=""; } return ipAddress; } }
package net.xdclass.xdvideo.utils; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; import net.xdclass.xdvideo.domain.User; import java.util.Date; /** * jwt工具类 */ public class JwtUtils { public static final String SUBJECT = "xdclass"; public static final long EXPIRE = 1000*60*60*24*7; //过期时间,毫秒,一周 //秘钥 public static final String APPSECRET = "xd666"; /** * 生成jwt * @param user * @return */ public static String geneJsonWebToken(User user){ if(user == null || user.getId() == null || user.getName() == null || user.getHeadImg()==null){ return null; } String token = Jwts.builder().setSubject(SUBJECT) .claim("id",user.getId()) .claim("name",user.getName()) .claim("img",user.getHeadImg()) .setIssuedAt(new Date()) .setExpiration(new Date(System.currentTimeMillis()+EXPIRE)) .signWith(SignatureAlgorithm.HS256,APPSECRET).compact(); return token; } /** * 校验token * @param token * @return */ public static Claims checkJWT(String token ){ try{ final Claims claims = Jwts.parser().setSigningKey(APPSECRET). parseClaimsJws(token).getBody(); return claims; }catch (Exception e){ } return null; } }
package net.xdclass.xdvideo.utils; import org.w3c.dom.Entity; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.StringWriter; import java.util.*; /** * 微信支付工具类,xml转map,map转xml,生成签名 */ public class WXPayUtil { /** * XML格式字符串转换为Map * * @param strXML XML字符串 * @return XML数据转换后的Map * @throws Exception */ public static Map<String, String> xmlToMap(String strXML) throws Exception { try { Map<String, String> data = new HashMap<String, String>(); DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder = documentBuilderFactory.newDocumentBuilder(); InputStream stream = new ByteArrayInputStream(strXML.getBytes("UTF-8")); org.w3c.dom.Document doc = documentBuilder.parse(stream); doc.getDocumentElement().normalize(); NodeList nodeList = doc.getDocumentElement().getChildNodes(); for (int idx = 0; idx < nodeList.getLength(); ++idx) { Node node = nodeList.item(idx); if (node.getNodeType() == Node.ELEMENT_NODE) { org.w3c.dom.Element element = (org.w3c.dom.Element) node; data.put(element.getNodeName(), element.getTextContent()); } } try { stream.close(); } catch (Exception ex) { // do nothing } return data; } catch (Exception ex) { throw ex; } } /** * 将Map转换为XML格式的字符串 * * @param data Map类型数据 * @return XML格式的字符串 * @throws Exception */ public static String mapToXml(Map<String, String> data) throws Exception { DocumentBuilderFactory documentBuilderFactory = DocumentBuilderFactory.newInstance(); DocumentBuilder documentBuilder= documentBuilderFactory.newDocumentBuilder(); org.w3c.dom.Document document = documentBuilder.newDocument(); org.w3c.dom.Element root = document.createElement("xml"); document.appendChild(root); for (String key: data.keySet()) { String value = data.get(key); if (value == null) { value = ""; } value = value.trim(); org.w3c.dom.Element filed = document.createElement(key); filed.appendChild(document.createTextNode(value)); root.appendChild(filed); } TransformerFactory tf = TransformerFactory.newInstance(); Transformer transformer = tf.newTransformer(); DOMSource source = new DOMSource(document); transformer.setOutputProperty(OutputKeys.ENCODING, "UTF-8"); transformer.setOutputProperty(OutputKeys.INDENT, "yes"); StringWriter writer = new StringWriter(); StreamResult result = new StreamResult(writer); transformer.transform(source, result); String output = writer.getBuffer().toString(); //.replaceAll("\n|\r", ""); try { writer.close(); } catch (Exception ex) { } return output; } /** * 生成微信支付sign * @return */ public static String createSign(SortedMap<String, String> params, String key){ StringBuilder sb = new StringBuilder(); Set<Map.Entry<String, String>> es = params.entrySet(); Iterator<Map.Entry<String,String>> it = es.iterator(); //生成 stringA="appid=wxd930ea5d5a258f4f&body=test&device_info=1000&mch_id=10000100&nonce_str=ibuaiVcKdpRxkhJA"; while (it.hasNext()){ Map.Entry<String,String> entry = (Map.Entry<String,String>)it.next(); String k = (String)entry.getKey(); String v = (String)entry.getValue(); if(null != v && !"".equals(v) && !"sign".equals(k) && !"key".equals(k)){ sb.append(k+"="+v+"&"); } } sb.append("key=").append(key); String sign = CommonUtils.MD5(sb.toString()).toUpperCase(); return sign; } /** * 校验签名 * @param params * @param key * @return */ public static boolean isCorrectSign(SortedMap<String, String> params, String key){ String sign = createSign(params,key); String weixinPaySign = params.get("sign").toUpperCase(); return weixinPaySign.equals(sign); } /** * 获取有序map * @param map * @return */ public static SortedMap<String,String> getSortedMap(Map<String,String> map){ SortedMap<String, String> sortedMap = new TreeMap<>(); Iterator<String> it = map.keySet().iterator(); while (it.hasNext()){ String key = (String)it.next(); String value = map.get(key); String temp = ""; if( null != value){ temp = value.trim(); } sortedMap.put(key,temp); } return sortedMap; } }