1. 程式人生 > >外部介面 -- 密文校驗與資料傳輸

外部介面 -- 密文校驗與資料傳輸

1. 對於第三方引用我們的介面,按照一切不信任原則,我們都要進行加密校驗。

2.考慮到密文驗證的通用性,將此方法從controller剝離出來,放到攔截器實現。

   step1 : 註冊攔截器

    <mvc:interceptors>
        <!-- 外部介面攔截器 -->
        <mvc:interceptor>
            <mvc:mapping path="/junjin/api/outSideInterface.do" /><!-- 如果不配置或/*,將攔截所有的Controller -->
            <bean class="com.junjin.interceptor.OutSideInterfaceInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
  

   step2 : 繼承HandlerInterceptor

<span style="font-size:12px;"><span style="font-family:SimSun;font-size:10px;">//在實際的handler被執行前被呼叫

</span>public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
   // 讀取配置檔案中的金鑰
   ConstPropertiesReader propertiesReader = ConstPropertiesReader.getInstance();
   String key = propertiesReader.get("key").toString();
  
   // 獲得客戶端密文(token是第三方放在url後面的請求資料)
   String token = request.getParameter("token");
     

   // request獲取post請求的資料 :
   String postContent = RequestUtil.getJSONStringAsciiCode(request);
		
   // 對傳送的資料進行加密
   String tokenCheck = TokenUtil.generateToken(key, postContent);
   logger.info(tokenCheck);
   if (tokenCheck.equals(token)) {
      //將資料返回到controller層面
      <span style="color:#FF0000;">request.setAttribute("postContent", postContent);</span>
      return true;
   } else {
      FjsCallBackObject obj = new FjsCallBackObject();
      obj.setStatus(1);
      obj.setMsg("密文不匹配,請重新提交");
      response.setCharacterEncoding("UTF-8");
      response.setHeader("Content-Type", "text/plain;charset=UTF-8");
      response.getWriter().write(FastJsonUtil.toJSONString(obj));
      return false;
   }
		
}</span>

step2_1 : 從request中讀取post請求的資料

<span style="font-size:12px;"><span style="color:#FF0000;">import org.apache.commons.io.IOUtils;</span>

public static String CHARSET = "UTF-8";

public static Stirng getJsonStringAsciiCode(HttpServletRequest request){
    
    String json = "";
    try{
       ServletInputStream in = request.getInputStream();
       String content = <span style="color:#FF0000;">IOUtils</span>.toString(in,CHARSET);
       json = URLDecoder.decode(content,CHARSET);
    }catch(IOException e){
      e.printStackTrace();
    }
    return json;
} </span>