Hledat
Přihlásit se
  • Věda a technika
  • Herní doupě
  • Tipy pro PC
  • IT Byznys
  • Mobily
  • Počítače
  • Počítače
  • Témata
  • Poradna
  • Diskuzní fórum
  • Video
  • Bazar
  • Blogy
  • MĚŘENÍ RYCHLOSTI
  • RSS
  • Facebook Twitter Google+ YouTube
  • Hardware
  • Software
  • Počítače
  • Notebooky
  • Služby na webu
  • Apple
  • Google
  • Microsoft
  • Seznam
  • Tiskové zprávy
Další témata
  • Týden Živě
  • Zprávy Živě
  • Testy
  • Pitvy
Všechna videa
X

Doporučit článek

Vaše jméno:

Váš e-mail:

E-mail adresáta:

Komentář:

kontrolní kód

Odeslat

Blogy Živě » Zaachi blog

Zaachi blog

Nový blog na adrese Blog.zive.cz
 

Java: HTTPS authorization

6. 8. 2008, z@chi

Vytvořit klasické spojení s URL adresou v protokolu HTTP není zřejmě žádný problém. Když se k tomu přidá nutná autorizace uživatele a navíc protokol HTTPS, připojení se může zkomplikovat.

Spojení a autorizace pod protokolem HTTPS je podobné jako pod klasickým HTTP. Rozdíl je v přijetí certifikátu a HTTPS komunikaci.

Výsledná třída má tři vstupní parametry:

  • url adresu pro připojení
  • přihlašovací jméno pro spojení
  • odpovídající přihlašovací heslo

Pro připojení k URL adrese slouží metoda private HttpsURLConnection connection(), která vrací identifikátor spojení:

private HttpsURLConnection connection() {
	URL senddata;
	try {
		//vytvoreni nove URL
		senddata = new URL(this.url);
		HttpsURLConnection con = null;
		try {
			//otevreni url
			con = (HttpsURLConnection) senddata.openConnection();
		} catch (IOException e) {
			e.printStackTrace();
		}
		//vraci ID spojeni
		return con;
	} catch (MalformedURLException e) {
		e.printStackTrace();
	}
	return null;
}

Metoda vrací identifikátor spojení, na jehož základě můžeme provést autorizaci k danému serveru.

Pro autorizaci slouží Metoda private void authorization(HttpsURLConnection con), která se na základě zadaného přihlašovacího jména a hesla pokusí připojit:

//autoriaze
private void authorization(HttpsURLConnection con) {
	//priprava dat pro identifikaci uzivatele
	String userPassword = this.LoginName + ":" + this.LoginPassword;
	//zakodovani dat do BASE64
	String encoding = new sun.misc.BASE64Encoder().encode(userPassword
			.getBytes());
	//odeslani hlavicky
	con.setRequestProperty("Content-Type",
			"application/x-www-form-urlencoded");
	//identifikace uzivatele
	con.setRequestProperty("Authorization", "Basic " + encoding);
}

Pokud se připojení nezdaří, je vrácena chyba:

Server returned HTTP response code: 401 for URL: https://url

Pro ukázku použití je v Main umístěn kód, který načte obsah připojené url adresy:

autorizace auth = new autorizace(url, loginname, password);

HttpsURLConnection con = auth.getConnection();

DataInputStream in = null;
try {
	in = new DataInputStream(con.getInputStream());
} catch (IOException e) {
	e.printStackTrace();
}
BufferedReader br = new BufferedReader(new InputStreamReader(in));
try {
	String strLine = br.readLine();
	System.out.print(strLine);
} catch (IOException e) {
	e.printStackTrace();
}
try {
	in.close();
} catch (IOException e) {
	e.printStackTrace();
}

Celý zdrojový kód je zde:

import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

public class autorizace {
	//private variables
	private String url;

	private String LoginName;

	private String LoginPassword;

	//public variables
	public HttpsURLConnection urlConnection;

	//konstruktor
	public autorizace(String url, String LoginName, String LoginPassword) {
		//nastaveni promennych
		this.url = url;
		this.LoginName = LoginName;
		this.LoginPassword = LoginPassword;

		this.run();
	}

	private void run(){
		//implementace TrustManageru
		TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
			public java.security.cert.X509Certificate[] getAcceptedIssuers() {
				return null;
			}

			public void checkClientTrusted(
					java.security.cert.X509Certificate[] certs, String authType) {
			}

			public void checkServerTrusted(
					java.security.cert.X509Certificate[] certs, String authType) {
			}
		} };
		try {
			SSLContext sc = SSLContext.getInstance(”SSL”);
			HostnameVerifier hv = new HostnameVerifier() {
				public boolean verify(String urlHostName, SSLSession session) {
					return true;
				}
			};
			HttpsURLConnection.setDefaultHostnameVerifier(hv);
			sc.init(null, trustAllCerts, new java.security.SecureRandom());
			HttpsURLConnection
					.setDefaultSSLSocketFactory(sc.getSocketFactory());
		} catch (Exception e) {
			try {
				throw e;
			} catch (Exception e1) {
				e1.printStackTrace();
			}
		}

		//nove https spojeni
		HttpsURLConnection con = null;
		//pripojeni k url adrese
		if ((con = this.connection()) == null) {
			System.exit(1);
		}

		con.setDoOutput(true);
		try {
			con.setRequestMethod(”POST”);
		} catch (ProtocolException e1) {
			e1.printStackTrace();
		}
		con.setDoInput(true);

		//zavolani metody pro autorizaci
		this.authorization(con);

		this.urlConnection = con;
	}
	//metoda vraci httpsurlconnection
	public HttpsURLConnection getConnection() {
		return this.urlConnection;
	}

	//autoriaze
	private void authorization(HttpsURLConnection con) {
		//priprava dat pro identifikaci uzivatele
		String userPassword = this.LoginName + “:” + this.LoginPassword;
		//zakodovani dat do BASE64
		String encoding = new sun.misc.BASE64Encoder().encode(userPassword
				.getBytes());
		//odeslani hlavicky
		con.setRequestProperty(”Content-Type”,
				“application/x-www-form-urlencoded”);
		//identifikace uzivatele
		con.setRequestProperty(”Authorization”, “Basic ” + encoding);
	}

	//pripojeni k url adrese
	private HttpsURLConnection connection() {
		URL senddata;
		try {
			//vytvoreni nove URL
			senddata = new URL(this.url);
			HttpsURLConnection con = null;
			try {
				//otevreni url
				con = (HttpsURLConnection) senddata.openConnection();
			} catch (IOException e) {
				e.printStackTrace();
			}
			//vraci ID spojeni
			return con;
		} catch (MalformedURLException e) {
			e.printStackTrace();
		}
		return null;
	}

	public static void main(String[] args) {
		String url = “https://www.stag.utb.cz/apps/stag/portal/”;
		String loginname = “a0460″;
		String password = “autobus”;
		autorizace auth = new autorizace(url, loginname, password);

		HttpsURLConnection con = auth.getConnection();

		DataInputStream in = null;
		try {
			in = new DataInputStream(con.getInputStream());
		} catch (IOException e) {
			e.printStackTrace();
		}
		BufferedReader br = new BufferedReader(new InputStreamReader(in));
		try {
			String strLine = br.readLine();
			System.out.print(strLine);
		} catch (IOException e) {
			e.printStackTrace();
		}
		try {
			in.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
}

Štítky: autorizace, https, Java


Publikováno v rubrice Java. Reakce v diskuzi lze sledovat prostřednictvím RSS 2.0. Můžete přidat komentář, nebo se na článek odkázat ze svého webu.

« Jednoduché grafy v PHP
GD #3: Výpis textu do obrázku »
 

Přidat komentář

*
Opište prosím text z obrázku.
Anti-Spam Image

Zaachi blog využívá WordPress MU a běží na Blog.zive.cz. Vytvořte si svůj vlastní blog
Sledování přes RSS: články a komentáře



  • Kategorie

    • Algoritmy (4)
    • Bezpečnost (7)
    • hardware (4)
    • Java (7)
    • Mimochodem (9)
    • MySQL (2)
    • OpenGL (4)
    • PHP (23)
    • software (6)
    • technologie (8)
  • Poslední příspěvky

    • Java: parsování HTML
    • Debian: když vám server nakyne
    • Google aktualizoval PageRank!
    • Jak se učíte programovat?
    • VirtualBox: jak přežít více systémů
  • Štítky

    3g Algoritmy apple autorizace Bezpečnost c++ datum eclipse gd gd2 google grafy graphs hash http https internet iphone Java javascript kamera knihovna kodovani lamp library linux mlha MySQL nusphere OpenGL operační systém optimalizace PHP phped plynulá změna pohyb popup request server slovník twitter visual studio window windows řazení
  • Kalendář

    Srpen 2008
    P Ú S Č P S N
    « Čvc   Zář »
     123
    45678910
    11121314151617
    18192021222324
    25262728293031
  • Seznam odkazů

    • Zaachi.com
  • Administrace

    • Přihlásit se


Předplatné Computer

Aktuální číslo časopisu Computer
  • Testy nejnovějších produktů na českém trhu.
  • Informace ze světa internetu i bezpečnosti.
  • Plné verze programů zdarma pro všechny čtenáře.
Archiv Předplatné
Elektronické předplatné Tištěné předplatné