// 獲取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是乙個抽象類,我們需要建立子...