Spring Security OAuth原始碼分析

2021-09-25 23:00:42 字數 2166 閱讀 7918

// 獲取clientid

string clientid = getclientid(principal);

// 根據clientid 讀取.property或.yml檔案裡檔案裡面的配置資訊

clientdetails authenticatedclient = getclientdetailsservice().loadclientbyclientid(clientid);

// 根據authenticatedclient和parameters建立tokenrequest的例項

tokenrequest tokenrequest = getoauth2requestfactory().createtokenrequest(parameters, authenticatedclient);

// 判斷請求是否傳clientid

if (clientid != null && !clientid.equals(""))

} // 檢查scope,請求授權要滿足配置中允許的授權

if (authenticatedclient != null)

// grant_type是否有值

if (!stringutils.hastext(tokenrequest.getgranttype()))

// 檢測是否為簡化模式,是簡化模式丟擲異常

if (tokenrequest.getgranttype().equals("implicit"))

// 是否為授權碼模式

if (isauthcoderequest(parameters))

} // 是否是重新整理令牌

if (isrefreshtokenrequest(parameters))

// 建立oauth2accesstoken 例項

oauth2accesstoken token = gettokengranter().grant(tokenrequest.getgranttype(), tokenrequest);

if (token == null)

return getresponse(token);

}

public oauth2accesstoken grant(string granttype, tokenrequest tokenrequest) 

} return null;

}

@transactional

public oauth2accesstoken createaccesstoken(oauth2authentication authentication) throws authenticationexception

// 刪除令牌

tokenstore.removeaccesstoken(existingaccesstoken);

}else

} // 重新整理的令牌有沒有、重新建立

if (refreshtoken == null)

// 重新整理令牌不等於null,如果重新整理的令牌沒過期則重用,過期了則新建。

else if (refreshtoken instanceof expiringoauth2refreshtoken)

} // 建立令牌

oauth2accesstoken accesstoken = createaccesstoken(authentication, refreshtoken);

tokenstore.storeaccesstoken(accesstoken, authentication);

// 獲取重新整理令牌重新儲存

refreshtoken = accesstoken.getrefreshtoken();

if (refreshtoken != null)

return accesstoken;

}

Cartographer原始碼篇 原始碼分析 1

在安裝編譯cartographer 1.0.0的時候,我們可以看到 主要包括cartorgarpher ros cartographer ceres sover三個部分。其中,ceres solver用於非線性優化,求解最小二乘問題 cartographer ros為ros平台的封裝,獲取感測器資料...

AbstractListView原始碼分析3

normal list that does not indicate choices public static final int choice mode none 0 the list allows up to one choice public static final int choice ...

Android AsyncTask原始碼分析

android中只能在主線程中進行ui操作,如果是其它子執行緒,需要借助非同步訊息處理機制handler。除此之外,還有個非常方便的asynctask類,這個類內部封裝了handler和執行緒池。本文先簡要介紹asynctask的用法,然後分析具體實現。asynctask是乙個抽象類,我們需要建立子...