1. 程式人生 > >Restful API Client客戶端身份驗證

Restful API Client客戶端身份驗證

最近除錯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