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客戶端
- 無密碼驗證:客戶端密碼客戶端
- 使用WebService釋出soap介面,並實現客戶端的https驗證Web客戶端HTTP
- Redis處理客戶端連線的內部實現機制RXRedis客戶端
- Rust中實現JWT身份驗證RustJWT
- validation客戶端驗證框架使用手冊客戶端框架
- ASP.NET Core2利用Jwt技術在服務端實現對客戶端的身份認證ASP.NETJWT服務端客戶端
- 如果呼叫遠端遠端url介面為https,且存在客戶端證書驗證,如何在客戶端處理HTTP客戶端
- 客戶端骨架屏實現客戶端
- MongoDB身份認證機制揭秘!MongoDB
- node實現基於token的身份驗證
- RocketMQ 客戶端負載均衡機制詳解及最佳實踐MQ客戶端負載
- jQuery實現客戶端CheckAll功能jQuery客戶端
- Kubernetes客戶端認證(三)—— Kubernetes使用CertificateSigningRequest方式簽發客戶端證書客戶端
- 7月起韓國銀行可使用區塊鏈驗證客戶身份區塊鏈
- 手機端身份證識別
- iOS逆向-客戶端認證iOS客戶端
- C++身份核驗介面程式碼、身份證OCR、身份證實名認證APIC++API
- golang實現tcp客戶端服務端程式GolangTCP客戶端服務端
- Redis的Pub/Sub客戶端實現Redis客戶端
- 網頁SSH客戶端的實現網頁客戶端
- node學習---jwt實現驗證使用者身份JWT
- Spring Security 6中使用PKCE實現身份驗證Spring
- 客戶端如何刪除根證書客戶端
- Java 專案中使用 Resilience4j 實現客戶端 API 呼叫的限速/節流機制Java客戶端API
- Go 實現簡易的 Redis 客戶端GoRedis客戶端
- IM撤回訊息-iOS客戶端實現iOS客戶端
- 03. 實現客戶端應用程式客戶端
- FTP客戶端c程式碼功能實現FTP客戶端C程式
- 身份證驗證工具類
- 2.13.3 使用 Oracle Wallet 實現在DBCA中使用身份驗證Oracle
- Android客戶端網路預連線優化機制探究Android客戶端優化
- Golang 實現 Redis(6): 實現 pipeline 模式的 redis 客戶端GolangRedis模式客戶端
- 實現客戶端與服務端的HTTP通訊客戶端服務端HTTP
- [譯]簡單的React身份校驗機制React
- C++批次核驗身份證真偽、實名認證介面、身份證識別C++
- SharePoint Online 認證Net客戶端物件客戶端物件
- 使用 Golang 實現 appium/WebDriverAgent 的客戶端庫GolangAPPWeb客戶端