資源簡介
接口簽名得工具類,可直接使用, 主要設計參考微信接口方案。

代碼片段和文件信息
package?com.lz.platform.core.utils;
import?com.lz.platform.core.exception.ApplicationException;
import?org.apache.commons.codec.digest.DigestUtils;
import?org.apache.commons.lang3.StringUtils;
import?org.slf4j.Logger;
import?org.slf4j.LoggerFactory;
import?javax.servlet.http.HttpServletRequest;
import?java.io.UnsupportedEncodingException;
import?java.net.URLDecoder;
import?java.util.Enumeration;
import?java.util.HashMap;
import?java.util.Map;
import?java.util.TreeMap;
/**
?*?Created?with?IDEA
?*?author:鮑承東
?*?Date:2018/11/27
?*?Time:11:52
?*?簽名驗證工具
?**/
public?class?SignUtils?{
????private?final?static?Logger?logger?=?LoggerFactory.getLogger(SignUtils.class);
????/**
?????*?方法描述:將字符串MD5加碼?生成32位md5碼
?????*
?????*?@param?inStr
?????*?@return
?????*/
????public?static?String?md5(String?inStr)?{
????????try?{
????????????return?DigestUtils.md5Hex(inStr.getBytes(“UTF-8“)).toUpperCase();
????????}?catch?(UnsupportedEncodingException?e)?{
????????????throw?new?RuntimeException(“MD5簽名過程中出現(xiàn)錯誤“);
????????}
????}
????/**
?????*?方法描述:簽名字符串
?????*
?????*?@param?params?需要簽名的參數(shù)
?????*?@param?appSecret?簽名密鑰
?????*?@return
?????*/
????public?static?String?sign(HashMap?params?String?appSecret)?{
????????StringBuilder?valueSb?=?new?StringBuilder();
????????//?將參數(shù)以參數(shù)名的字典升序排序
????????Map?sortParams?=?new?TreeMap(params);
????????for?(Map.Entry?entry?:?sortParams.entrySet())?{
????????????String?key?=?entry.getKey();
????????????String?value?=??entry.getValue().trim();
????????????if?(StringUtils.isNotEmpty(value))
????????????????valueSb.append(“&“).append(key).append(“=“).append(value);
????????}
????????String?stringA?=?valueSb.toString().replaceFirst(“&“““);
????????String?stringSignTemp?=?stringA?+?“&“+“secret=“+appSecret;
????????return?md5(stringSignTemp);
????}
????/**
?????*?方法描述:驗證簽名
?????*
?????*?@param?appSecret?加密秘鑰
?????*?@param?request
?????*?@return
?????*?@throws?Exception
?????*/
????public?static?boolean?verify(String?appSecret?HttpServletRequest?request)?throws?Exception?{
????????String?sign?=?request.getParameter(“sign“);
????????if?(sign?==?null)?{
????????????throw?new?ApplicationException(“請求中沒有帶簽名[sign]!“);
????????}
????????if?(request.getParameter(“timestamp“)?==?null)?{
????????????throw?new?ApplicationException(“請求中沒有帶時間戳[timestamp]!“);
????????}
????????HashMap?params?=?new?HashMap();
????????//?獲取url參數(shù)
????????@SuppressWarnings(“unchecked“)
????????Enumeration?enu?=?request.getParameterNames();
????????while?(enu.hasMoreElements())?{
????????????String?paramName?=?enu.nextElement().trim();
????????????if?(!paramName.equals(“sign“))?{
????????????????//?拼接參數(shù)值字符串并進行utf-8解碼,防止中文亂碼產(chǎn)生
????????????????params.put(paramName?URLDecoder.decode(request.getParameter(paramName)?“UTF-8“));
????????????}
????????}
????????String?mysign?=?sign(para
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件???????3888??2018-11-27?15:28??簽名\SignUtils.java
?????文件???????1349??2018-11-29?12:50??簽名\接口簽名說明.txt
?????目錄??????????0??2018-11-29?12:46??簽名
-----------?---------??----------?-----??----
?????????????????5237????????????????????3
評論
共有 條評論