Restful API Client客戶端身份驗證
阿新 • • 發佈:2019-01-01
最近除錯marathon的rest api介面,通過marathon的rest介面獲得應用的配置資訊。
由於marathon服務端配置了身份驗證,在網頁端開啟的時候可以在頁面輸入使用者名稱和密碼進行訪問,但是在程式裡面進行訪問的時候如何進行驗證就無從下手了。
這幾天在看Jersey 1.x 的官方文件,關於 Client API的介紹裡面提到了Security with Http(s)URLConnection,參考例項如下:
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.Authenticator;
import java.net.PasswordAuthentication;
import java.net.URL;
public class RunHttpSpnego {
static final String kuser = "username"; // your account name
static final String kpass = "password"; // your password for the account
static class MyAuthenticator extends Authenticator {
public PasswordAuthentication getPasswordAuthentication() {
// I haven't checked getRequestingScheme() here, since for NTLM
// and Negotiate, the usrname and password are all the same.
System.err.println("Feeding username and password for " + getRequestingScheme());
return (new PasswordAuthentication(kuser, kpass.toCharArray()));
}
}
public static void main(String[] args) throws Exception {
Authenticator.setDefault(new MyAuthenticator());
URL url = new URL("http://192.168.3.13:8080/v2/apps");
InputStream ins = url.openConnection().getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(ins));
String str;
while((str = reader.readLine()) != null)
System.out.println(str);
}
}
既然Rest提供了客戶端,我們也可以通過Client介面來進行身份驗證,訪問伺服器,具體實現如下:
import javax.ws.rs.core.MediaType;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter;
public class RestAuth {
public static void main(String[] args) {
Client client = Client.create();
client.addFilter(new HTTPBasicAuthFilter("username", "password"));
WebResource webResource = client
.resource("http://192.168.3.13:8080/v2/apps");
String res = webResource.accept(MediaType.APPLICATION_JSON).get(String.class);
System.out.println(res);
client.destroy();
}
}
這樣,通過client介面也可以進行身份驗證,訪問marathon的服務端資源。
關於身份驗證問題,在linux平臺用curl訪問服務端資源比較多,用curl也可以進行簡單的使用者名稱和密碼驗證。
#curl通過-u命令設定服務端的使用者名稱和密碼
#-u/--user <user[:password]> Set server user and password
curl -u username:password http://192.168.3.13:8080/v2/apps