在工作中經(jīng)常遇見項目對接,那么該如何寫一個安全的接口供給對方調(diào)用呢???
1.公共接口,任何人都可以訪問調(diào)用
1.1.適合場景,公司后臺整合廣告管理,提供統(tǒng)一的接口返回給公司其他項目調(diào)用和郵件模板調(diào)用,這時候需要設計一個統(tǒng)一的接口,返回廣告的內(nèi)容。還有天氣查詢等場景。
@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.適合場景,公司內(nèi)部兩個項目組進行對接,為了防止接口被暴露和偽造訪問,這個時候需要對參數(shù)進行加密處理,防止接口被其他外部人員調(diào)用,一般采用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.適合場景,內(nèi)部接口加密過的數(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ù)來源設置不同的私鑰,這樣即使接口秘鑰被泄露,沒有私鑰,依然不能對接口進行操作,而且可以記錄是哪個項目的秘鑰被泄露,快速定位出問題的來源,且不會影響其他項目調(diào)用。
@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); } } }
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/71188.html
摘要:本文將從以下幾個方面闡述架構(gòu)設計的一些經(jīng)驗和思考。原文及討論請到通訊作為一種跨語言開發(fā)模式,通訊層是架構(gòu)首先應該考慮和設計的,往后所有的邏輯都是基于通訊層展開。 關于Hybrid模式開發(fā)app的好處,網(wǎng)絡上已有很多文章闡述了,這里不展開。 本文將從以下幾個方面闡述Hybrid app架構(gòu)設計的一些經(jīng)驗和思考。 原文及討論請到 github issue 通訊 作為一種跨語言開發(fā)模式,通訊...
摘要:權(quán)限設計的雜談這篇文章的定位,不是宣傳某個框架,僅僅之是梳理一下有關權(quán)限方面的一些想法和最近項目中的一些探索過程。而這兩者的取舍則是有設計人員決定的。數(shù)據(jù)抽象原則最小特權(quán)劃分從某個程度上來說決定了控制的對象,而數(shù)據(jù)抽象原則是是決定了操作。 權(quán)限設計的雜談 這篇文章的定位,不是宣傳某個框架,僅僅之是梳理一下有關權(quán)限方面的一些想法和最近項目中的一些探索過程。我們主要想解決一下問題。 什么...
摘要:接口測試主要用于檢測外部系統(tǒng)與系統(tǒng)之間以及內(nèi)部各個子系統(tǒng)之間的交互點。二接口測試用例設計接口測試的用例設計是關鍵,不能只是單純正常請求通過就算接口測試過了,要從業(yè)務功能性能等上去設計用例。 ...
摘要:本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進行詳細的剖析與解答。敬請關注服務端思維微信公眾號,獲取最新文章。 原文地址:梁桂釗的博客博客地址:http://blog.720ui.com 這里,筆者結(jié)合自己過往的面試經(jīng)驗,整理了一些核心的知識清單,幫助讀者更好地回顧與復習 Java 服務端核心技術。本文會以引出問題為主,后面有時間的話,筆者陸續(xù)會抽些重要的知識點進...
閱讀 3751·2021-10-09 09:44
閱讀 3509·2021-09-22 15:29
閱讀 3296·2019-08-30 15:54
閱讀 3077·2019-08-29 16:19
閱讀 2222·2019-08-29 12:50
閱讀 647·2019-08-26 14:04
閱讀 1775·2019-08-23 18:39
閱讀 1403·2019-08-23 17:59