springboot~用正則表達式提取bearer token

  • 前後一體的應用,是這樣進行認證的
  1. 用戶向服務端發送驗證信息(用戶名、密碼);
  2. 服務端驗證成功就向用戶返回一個sessionid;
  3. 服務端保存了這個session_id對應的信息,並寫入用戶的 Cookie;
  4. 之後的每一次請求,都會通過Cookie,將session_id傳回服務端,服務端收到session_id,找到對應的數據,由此得知用戶的身份。
  • 前後分離之後,是這樣進行認證的
    bearer token是一種認證方式,是一種安全令牌,擁有 bearer token 的任何一方(被稱爲 "bearer"),可以以任何方式,和同樣持有它的任何一方一樣地使用它來訪問受 OAuth 2.0保護的資源。

參考:https://www.rfc-editor.org/rfc/rfc6750

  • 在java帶中,我們一般把bearer token放到請求頭的Authorization中,我們可以通過正則來判斷token的合法性,並返回頭中的有效token
private String resolveFromAuthorizationHeader(HttpServletRequest request) {
  String authorization = request.getHeader("Authorization");
  Pattern authorizationPattern = Pattern.compile("^Bearer (?<token>[a-zA-Z0-9-:._~+/]+=*)$", Pattern.CASE_INSENSITIVE);//<token>的值就是真實的表達式配置的值

  if (!StringUtils.startsWithIgnoreCase(authorization, "bearer")) {
	 return null;
 }
 Matcher matcher = authorizationPattern.matcher(authorization);
 if (!matcher.matches()) {
   BearerTokenError error = BearerTokenErrors.invalidToken("Bearer token is malformed");
   throw new OAuth2AuthenticationException(error);
 }
return matcher.group("token");//從上面的正則表達式中獲取token
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章