保護url時效性和安全性的一種解決方案

來源:互聯網
上載者:User

標籤:time   top   https   lan   xxx   java代碼   map   equals   好的   

幾乎都是同事小哥哥幫我鋪路,給我參考連結,實現的理論方法以及知識,我只剩下看資料,敲代碼,出錯了也是他幫我看著一步步解釋搞定過來的。嗯,大好人一枚。

 

ok,思路:

是產生一個隨機數放在url裡面,當做參數傳遞,在業務請求controller那裡檢驗這個nonce是否與緩衝裡的一致,並且添加一個時間戳記的屬性,這樣可以設定一段時間內url有效,過段時間點擊就出現連結失效的情況。

開始咯:

1:使用了SecureRandom產生隨機數nonce

import java.security.SecureRandom;        String nonce = null;        SecureRandom random = null;        try {            random = SecureRandom.getInstance("SHA1PRNG");            System.out.println("SecureRandom random init:" + random);        } catch (NoSuchAlgorithmException e1) {            // TODO Auto-generated catch block            e1.printStackTrace();        }        byte[] values = new byte[20];        random.nextBytes(values);        nonce = String.valueOf(random.nextLong());

2 :  自訂一個class ,來構建一個對象,對象裡面存放時間戳記,nonce,openid.產生之後,把它放到一個cache裡面,這個Guava Cache 存放。

假如只是簡單的把Guava Cache當作HashMap或ConcurrentHashMap的替代品,不需要用到load方法,而是手動地插入,可以這樣: 

Java代碼

public static final Cache<String, Object> cache = CacheBuilder.newBuilder().expireAfterWrite(10, TimeUnit.MINUTES).build();

注意不能用LoadingCache了。
尋找:
cache.getIfPresent("xx");
插入:
cache.put("xx", "xxx");

 

3 : 擷取緩衝裡面的資料去對比檢驗就好了

private Boolean checkTimeOut(String openid,String nonce){        Boolean flag = false;        if(!nonce.isEmpty()){            StructureOfNonce v = (StructureOfNonce) MenuClickEventHandler.cache.getIfPresent(nonce);            String cnonce = v.getNonce();            String copenid = v.getOpenid();            long createTimestamp = v.getTimestamp();            if(openid.equalsIgnoreCase(copenid) && nonce.equalsIgnoreCase(cnonce)){                Long currentTime = System.currentTimeMillis();                int time =(int) (currentTime - createTimestamp)/1000/60 ;                if(0 <= time && time <= 1){                    flag = true;                }            }        }        return flag;    }

Cheers !

好的,全是別人的經驗,下面放巨人的果實吧!

詳細解析cacheGuava Cache :

http://bylijinnan.iteye.com/blog/2225074  

CacheBuilder類的文檔:
https://google.github.io/guava/releases/17.0/api/docs/com/google/common/cache/CacheBuilder.html 單例模式實現的範例,提供解題思路:https://gxnotes.com/article/36005.html 產生隨機數:https://tersesystems.com/2015/12/17/the-right-way-to-use-securerandom/

保護url時效性和安全性的一種解決方案

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.