JAX-RSREST客戶端實現基本身份驗證機制
版權宣告:本文為博主chszs的原創文章,未經博主允許不得轉載。 https://blog.csdn.net/chszs/article/details/46725551
《JAX-RS REST客戶端實現基本身份驗證機制》
作者:chszs,版權所有,未經同意,不得轉載。博主主頁:http://blog.csdn.net/chszs
很多SaaS API專案提供了HTTP訪問的基本身份驗證機制。因此,本文提供瞭如何在JAX-RS REST客戶端實現基本的訪問認證。有些HTTP客戶端庫提供了基本身份驗證過濾器,使用這些庫會更簡單。
1、基本的身份驗證機制
簡單來說,基本的身份驗證機制是在伺服器端實現的身份驗證機制,只需要客戶端提供使用者名稱和密碼即可,但是它對於HTTP報頭格式有一些特殊要求,如下所示:
基本身份驗證機制的HTTP Header格式
Authorization: Basic
“Authorization”是報頭的名字,它的值是這樣,比如”Basic YXBpOmtleS03Y2IzODY4ZWI5MmM2ZzFlZmY3NzY1YWExZDhmNmE0OQ==”。
在值中,Basic是關鍵字,它不能使用BASE64編碼,它緊跟空格,然後才是“使用者名稱+冒號+密碼”(即使用者名稱:密碼)的BASE64編碼後的字串。
2、Java 8之前的版本構建基本的身份驗證
在Java 8之前,要構建基本的身份驗證,可以使用javax.xml.bind.DatatypeConverter工具類。比如:
String username = "myusername";
String password = "myPassword";
String usernameAndPassword = username + ":" + password;
String authorizationHeaderName = "Authorization";
String authorizationHeaderValue = "Basic " + javax.xml.bind.DatatypeConverter.printBase64Binary( usernameAndPassword.getBytes() );
3、Java 8構建基本的身份驗證
Java 8要構建基本的身份驗證,可以使用java.util.Base64工具類。比如:
String username = "myusername";
String password = "myPassword";
String usernameAndPassword = username + ":" + password;
String authorizationHeaderName = "Authorization";
String authorizationHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString( usernameAndPassword.getBytes() );
4、通過JAX-RS REST客戶端庫構建的身份驗證
要使用JAX-RS REST客戶端庫構建的身份驗證,可以這樣:
import static org.junit.Assert.*;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.core.MultivaluedHashMap;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response;
import org.junit.Test;
public class BasicAuthenticationTest {
@Test
public void testBasicAuthentication() {
//Define basic authentication credential values
String username = "myusername";
String password = "myPassword";
String usernameAndPassword = username + ":" + password;
String authorizationHeaderName = "Authorization";
String authorizationHeaderValue = "Basic " + java.util.Base64.getEncoder().encodeToString( usernameAndPassword.getBytes() );
// Build the form for a post request
MultivaluedMap< String, String> formParameters = new MultivaluedHashMap();
formParameters.add( "field1", "fieldValue1" );
formParameters.add( "field2", "fieldValue2" );
// Perform a post request
String restResource = "https://restserver:8080/app-name/rest-api/";
Client client = ClientBuilder.newClient();
Response res = client.target( restResource )
.path( "login" ) // API Module Path
.request( "application/json" ) // Expected response mime type
.header( authorizationHeaderName, authorizationHeaderValue ) // The basic authentication header goes here
.post( Entity.form( formParameters ) ); // Perform a post with the form values
assertTrue( res.getStatus() == 200 );
}
}
5、總結
- 對於JDK 6以上版本,可以使用javax.xml.bind.DatatypeConverter類的printBase64Binary(byte[])靜態方法把位元組陣列編碼成BASE64的字串。
- Java 8則提供了java.util.Base64類,專用於處理Basic、URL、檔名和MIME等的編解碼。
相關文章
- Identity Server 4 - Hybrid Flow - MVC客戶端身份驗證IDEServerMVC客戶端
- 無密碼驗證:客戶端密碼客戶端
- HBase最佳實踐-客戶端超時機制客戶端
- ESMTP身份驗證機制探索手記 (轉)
- MVC驗證10-到底用哪種方式實現客戶端服務端雙重非同步驗證MVC客戶端服務端非同步
- js實現身份證號碼驗證JS
- Redis處理客戶端連線的內部實現機制RXRedis客戶端
- 使用WebService釋出soap介面,並實現客戶端的https驗證Web客戶端HTTP
- ASP.NET Core2利用Jwt技術在服務端實現對客戶端的身份認證ASP.NETJWT服務端客戶端
- Oracle服務端驗證機制Oracle服務端
- validation客戶端驗證框架使用手冊客戶端框架
- Ext實現的身份證格式驗證程式碼
- 客戶端骨架屏實現客戶端
- 如果呼叫遠端遠端url介面為https,且存在客戶端證書驗證,如何在客戶端處理HTTP客戶端
- SSLSocket實現服務端和客戶端雙向認證的例子服務端客戶端
- mvc 客戶端 驗證 失效 沒有 form 標籤MVC客戶端ORM
- 客戶端驗證和onclick事件控制程式碼客戶端事件
- MySQL的可插入驗證和客戶端明文驗證外掛介紹MySql客戶端
- javascript實現的身份證號碼驗證程式碼JavaScript
- 解決Java抓取頁面遇到客戶端身份認證的辦法Java客戶端
- 7月起韓國銀行可使用區塊鏈驗證客戶身份區塊鏈
- node實現基於token的身份驗證
- jQuery實現客戶端CheckAll功能jQuery客戶端
- RocketMQ 客戶端負載均衡機制詳解及最佳實踐MQ客戶端負載
- MVC學習筆記之:ASP.NET MVC的客戶端驗證-jQuery.validate驗證結合Model驗證中的實現MVC筆記ASP.NET客戶端jQuery
- iOS逆向-客戶端認證iOS客戶端
- js實現的身份證合法性驗證程式碼JS
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- Redis的Pub/Sub客戶端實現Redis客戶端
- 網頁SSH客戶端的實現網頁客戶端
- c#實現redis客戶端(一)C#Redis客戶端
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- ZooKeeper服務發現客戶端--重連認證客戶端
- javascript 驗證身份證JavaScript
- 客戶端如何刪除根證書客戶端
- 利用IPsec實現網路安全之四(CA證書實現身份驗證)
- java 實現從15位~18位的身份證號碼轉換,校驗中國大陸公民身份證、香港居民身份證、澳門身份證和臺灣身份證。Java
- Android實現Thrift服務端與客戶端Android服務端客戶端