接口对接:关于明文和密钥,还有生成Sign工具类

 

第一步:

首先是定义明文(key)和密钥(secret)

现在是保存在配置文件中,如util.properties

secret是由MD5(key+6位随机数)生成

[plain] view plain copy
  1. key=autoapp  
  2. secret=0000c034de3026ca9b49c5f7652899b1  


第二步:

签名工具(SignUtil)

  1. package com.appbox.util.business;  
  2.   
  3. import java.util.Map;  
  4. import java.util.TreeMap;  
  5. import java.util.Map.Entry;  
  6.   
  7. import com.appbox.util.encryption.MD5;  
  8.   
  9. public class SignUtil {  
  10.         //返回生成的签名,获得http请求的parameters的key+value组成  
  11.     public static String generatSign(Map<String, Object> parameters, String secret){  
  12.         Map<String, Object> sortedmap = getSortedData(parameters);  
  13.         StringBuffer bs = new StringBuffer();  
  14.         for(Entry<String, Object> o : sortedmap.entrySet()){  
  15.             if(!"sign".equals(o.getKey())){  
  16.                 bs.append(o.getKey() + "=" + ((String[]) o.getValue())[0] + "&");  
  17.             }  
  18.         }  
  19.         String result = bs.deleteCharAt(bs.length() - 1).toString();  
  20.         System.out.println(result);  
  21.         return MD5.Md5(secret + result);  
  22.     }  
  23.       
  24.     public static Map<String, Object> getSortedData(Map<String, Object> map){  
  25.         if(map == null){  
  26.             return null;  
  27.         }  
  28.       
  29.         Map<String, Object> m = new TreeMap<String, Object>();  
  30.         for(Entry<String, Object>o : map.entrySet()){  
  31.             m.put(o.getKey(), o.getValue());  
  32.         }  
  33.         return m;  
  34.     }  
  35.       
  36. }  


 第三步:创建拦截器

  1. package com.appbox.util.interceptor;  
  2.   
  3. import java.io.UnsupportedEncodingException;  
  4. import java.util.Map;  
  5.   
  6. import javax.servlet.http.HttpServletRequest;  
  7.   
  8. import org.apache.struts2.ServletActionContext;  
  9.   
  10. import com.alibaba.fastjson.JSONObject;  
  11. import com.appbox.base.baseaction.BaseAction;  
  12. import com.appbox.base.vo.HttpRequest;  
  13. import com.appbox.util.business.SignUtil;  
  14. import com.appbox.util.property.PropertiesUtil;  
  15. import com.opensymphony.xwork2.ActionContext;  
  16. import com.opensymphony.xwork2.ActionInvocation;  
  17. import com.opensymphony.xwork2.interceptor.Interceptor;  
  18.   
  19. /** 
  20.  * 请求参数拦截器 用于包装和校验定制平台请求参数 
  21.  */  
  22. @SuppressWarnings("serial")  
  23. public class ParamsInterceptor extends BaseAction implements Interceptor {  
  24.       
  25.     private static String msg;  
  26.       
  27.     @Override  
  28.     public void destroy() {  
  29.         // TODO Auto-generated method stub  
  30.           
  31.     }  
  32.   
  33.     public void init() {  
  34.         // TODO Auto-generated method stub  
  35.           
  36.     }  
  37.   
  38.     @Override  
  39.     public String intercept(ActionInvocation invocation) throws Exception {  
  40.         // TODO Auto-generated method stub  
  41.           
  42.         ActionContext context = invocation.getInvocationContext();  
  43.         HttpServletRequest request = ServletActionContext.getRequest();  
  44.         request.setCharacterEncoding("UTF-8");  
  45.         System.out.println("request"+request);  
  46.         HttpRequest req =  createHttpRequest(request);  
  47.         JSONObject json = new JSONObject();  
  48.   
  49.         if(!checkProperties(req)){  
  50.             json.put("msg", msg);  
  51.             json.put("state"false);  
  52.             return ajaxJson(json.toJSONString());  
  53.         }  
  54.           
  55.         if(!checksign(request,req )){  
  56.             json.put("msg", msg);  
  57.             json.put("state"false);  
  58.             return ajaxJson(json.toJSONString());  
  59.         }  
  60.           
  61.         return invocation.invoke();  
  62.     }  
  63.   
  64.   
  65.     /** 
  66.      * 验证key/sign/secret 
  67.      * @param request 
  68.      * @param req 
  69.      * @return 
  70.      */  
  71.     private boolean checksign(HttpServletRequest request, HttpRequest req) {  
  72.         String key = request.getParameter("key");  
  73.         String key_ad = PropertiesUtil.getPropertyValue("key");  
  74.         if (key == null || !key_ad.equals(key)) {  
  75.             msg = "key不正确";  
  76.             return false;  
  77.         }  
  78.         //密钥是MD5(key+随机6位数)  
  79.         String secret = PropertiesUtil.getPropertyValue("secret");  
  80.         try {  
  81.             request.setCharacterEncoding("utf-8");  
  82.         } catch (UnsupportedEncodingException e) {  
  83.             // TODO Auto-generated catch block  
  84.             e.printStackTrace();  
  85.         }  
  86.         Map map = request.getParameterMap();  
  87.         System.out.println("提交的签名值:" + req.getSign());  
  88.   
  89.         String sign = SignUtil.generatSign(map, secret);  
  90.         System.out.println("系统生成的签名值:" + sign);  
  91.         if (!sign.equalsIgnoreCase(req.getSign())) {  
  92.             msg = "签名不正确";  
  93.             return false;  
  94.         }  
  95.         return true;  
  96.     }  
  97.   
  98.     /** 
  99.      * 验证请求参数非空 
  100.      * @param req 
  101.      * @return 
  102.      */  
  103.     private boolean checkProperties(HttpRequest req) {  
  104.         if (req.getKey() == null || req.getKey().isEmpty()) {  
  105.             msg = "key不为空";  
  106.             return false;  
  107.         }  
  108. //      if (req.getSign() == null || req.getSign().isEmpty()) {  
  109. //          msg = "签名不为空";  
  110. //          return false;  
  111. //      }  
  112.         if (req.getIconpath() == null || req.getIconpath().isEmpty()) {  
  113.             msg = "软件图标不为空";  
  114.             return false;  
  115.         }  
  116.         if  (req.getApppath() == null || req.getApppath().isEmpty()){  
  117.             msg = "平台上已上传媒体路径不为空";  
  118.             return false;  
  119.         }  
  120.         if  (req.getType() == null || req.getType().isEmpty()){  
  121.             msg = "媒体类型不为空";  
  122.             return false;  
  123.         }  
  124.         if  (req.getCustomername() == null || req.getCustomername().isEmpty()){  
  125.             msg = "媒体主名称不为空";  
  126.             return false;  
  127.         }  
  128.         if  (req.getMedianame() == null || req.getMedianame().isEmpty()){  
  129.             msg = "媒体名称不为空";  
  130.             return false;  
  131.         }  
  132.         if  (req.getDesc() == null || req.getDesc().isEmpty()){  
  133.             msg = "媒体简介不为空";  
  134.             return false;  
  135.         }  
  136.         if  (req.getIdcode() == null || req.getIdcode().isEmpty()){  
  137.             msg = "软件标识码不为空";  
  138.             return false;  
  139.         }  
  140.         return true;  
  141.     }  
  142.     /** 
  143.      * 获得请求 
  144.      * @param request 
  145.      * @return 
  146.      */  
  147.     private HttpRequest createHttpRequest(HttpServletRequest request) {  
  148.         HttpRequest req = new HttpRequest();  
  149.         req.setKey(request.getParameter("key"));  
  150.         req.setApppath(request.getParameter("apppath"));  
  151.         req.setDesc(request.getParameter("desc"));  
  152.         req.setEmail(request.getParameter("email"));  
  153.         req.setIconpath(request.getParameter("iconpath"));  
  154.         req.setIdcode(request.getParameter("idcode"));  
  155. //      req.setIpaddr();  //ip地址  
  156.         req.setCustomername(request.getParameter("customername"));  
  157.         req.setMedianame(request.getParameter("medianame"));  
  158.         req.setSign(request.getParameter("sign"));  
  159.         req.setType(request.getParameter("type"));  
  160.         return req;  
  161.     }  
  162.       
  163. }  


第四步:配置总项目src下的struts.xml配置文件

  1. <!-- 平台对接  -->  
  2.     <package name="struts-paramsinterceptor" extends="json-default">  
  3.        <interceptors>  
  4.            <interceptor name="paramsInterceptor" class="com.appbox.util.interceptor.ParamsInterceptor"></interceptor>  
  5.              
  6.            <interceptor-stack name="paramsStack">  
  7.                <interceptor-ref name="defaultStack" />  
  8.                <interceptor-ref name="paramsInterceptor" />  
  9.            </interceptor-stack>  
  10.        </interceptors>  
  11.        <default-interceptor-ref name="paramsStack"></default-interceptor-ref>  
  12.          
  13.     </package> 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值