在工作中經常遇見項目對接,那么該如何寫一個安全的接口供給對方調用呢???
1.公共接口,任何人都可以訪問調用
1.1.適合場景,公司后臺整合廣告管理,提供統(tǒng)一的接口返回給公司其他項目調用和郵件模板調用,這時候需要設計一個統(tǒng)一的接口,返回廣告的內容。還有天氣查詢等場景。
@PostMapping("/syncInfo") public Result syncInfo(@RequestParam(name = "data")String data){ if(!StringUtils.isNotBlank(data)){ return new Result("失?。?,false,HttpCode.STATUS_104); } InfoVo infoVo = JSONObject.parseObject(data,InfoVo.class); dealInfo(infoVo); return new Result("成功!",true, HttpCode.STATUS_200); }
2.接口參數(shù)加密
2.1.適合場景,公司內部兩個項目組進行對接,為了防止接口被暴露和偽造訪問,這個時候需要對參數(shù)進行加密處理,防止接口被其他外部人員調用,一般采用desc或者aes對稱加密,約定好秘鑰進行對接。
@PostMapping("/syncInfo") public Result syncInfo(@RequestParam(name = "data")String data){ try { if(!StringUtils.isNotBlank(data)){ return new Result("失?。?,false,HttpCode.STATUS_104); } DES des = new DES("秘鑰".getBytes()); String j = des.decryptStr(data); logger.debug("解碼前:" + data); logger.debug("解碼后:" + j); InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class); dealInfo(infoVo); return new Result("成功!",true, HttpCode.STATUS_200); }catch (Exception e){ e.printStackTrace(); if(!StringUtils.isNotBlank(data)){ return new Result("系統(tǒng)錯誤!",false,HttpCode.STATUS_105); } } }
3.接口時效性加密+接口參數(shù)加密
3.1.適合場景,內部接口加密過的數(shù)據(jù)鏈接被暴露,不斷有相同數(shù)據(jù)對接口進行訪問,這個適合需要對接口加入時間戳參數(shù),設計失效時間解決這個問題。
@PostMapping("/syncInfo") public Result syncInfo(@RequestParam(name = "data")String data){ try { if(!StringUtils.isNotBlank(data)){ return new Result("失敗!",false,HttpCode.STATUS_104); } DES des = new DES("秘鑰".getBytes()); String j = des.decryptStr(data); logger.debug("解碼前:" + data); logger.debug("解碼后:" + j); InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class); if(AddSecondes(infoVo.getTime(),20) < new Date().getTime()){ return new Result("接口失效!",false,HttpCode.STATUS_100); } dealInfo(infoVo); return new Result("成功!",true, HttpCode.STATUS_200); }catch (Exception e){ e.printStackTrace(); if(!StringUtils.isNotBlank(data)){ return new Result("系統(tǒng)錯誤!",false,HttpCode.STATUS_105); } } }
4.接口時效性+接口參數(shù)加密+不同來源的私鑰
4.1適合場景, 當接口秘鑰被泄露時,我們可以對不同的數(shù)據(jù)來源設置不同的私鑰,這樣即使接口秘鑰被泄露,沒有私鑰,依然不能對接口進行操作,而且可以記錄是哪個項目的秘鑰被泄露,快速定位出問題的來源,且不會影響其他項目調用。
@PostMapping("/syncInfo") public Result syncInfo(@RequestParam(name = "data")String data){ try { if(!StringUtils.isNotBlank(data)){ return new Result("失??!",false,HttpCode.STATUS_104); } DES des = new DES("基礎秘鑰".getBytes()); String j = des.decryptStr(data); logger.debug("解碼前:" + data); logger.debug("解碼后:" + j); InfoVo infoVo = JSONObject.parseObject(j,InfoVo.class); if(AddSecondes(infoVo.getTime(),20) < new Date().getTime()){ return new Result("接口失效!",false,HttpCode.STATUS_100); } String sign = getSignByFrom(Info.getFrom()); logger.debug("來源秘鑰"+sign); String k = des.decryptStr(Info.getData); dealInfo(k); return new Result("成功!",true, HttpCode.STATUS_200); }catch (Exception e){ e.printStackTrace(); if(!StringUtils.isNotBlank(data)){ return new Result("系統(tǒng)錯誤!",false,HttpCode.STATUS_105); } } }
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://systransis.cn/yun/71188.html
摘要:本文將從以下幾個方面闡述架構設計的一些經驗和思考。原文及討論請到通訊作為一種跨語言開發(fā)模式,通訊層是架構首先應該考慮和設計的,往后所有的邏輯都是基于通訊層展開。 關于Hybrid模式開發(fā)app的好處,網絡上已有很多文章闡述了,這里不展開。 本文將從以下幾個方面闡述Hybrid app架構設計的一些經驗和思考。 原文及討論請到 github issue 通訊 作為一種跨語言開發(fā)模式,通訊...
摘要:接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內部各個子系統(tǒng)之間的交互點。二接口測試用例設計接口測試的用例設計是關鍵,不能只是單純正常請求通過就算接口測試過了,要從業(yè)務功能性能等上去設計用例。 ...
摘要:本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進行詳細的剖析與解答。敬請關注服務端思維微信公眾號,獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結合自己過往的面試經驗,整理了一些核心的知識清單,幫助讀者更好地回顧與復習 Java 服務端核心技術。本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進...
閱讀 3691·2021-10-09 09:44
閱讀 3395·2021-09-22 15:29
閱讀 3149·2019-08-30 15:54
閱讀 3026·2019-08-29 16:19
閱讀 2155·2019-08-29 12:50
閱讀 600·2019-08-26 14:04
閱讀 1706·2019-08-23 18:39
閱讀 1355·2019-08-23 17:59