2009-06-04 9 views
7

Sto provando a creare un'app J2ME, che comunica con il webserver utilizzando il connettore HttpConnection.Autenticazione HTTP in J2ME

Quando parlo al WebServer, devo per l'autenticazione tramite autenticazione HTTP di base, che va normalmente come

http://username:[email protected]/rest/api/method

Ma in J2ME, quando ho costruire un URL di questa forma, doesn' lavoro.

Ho anche provato ad aggiungere richiesta di proprietà, hc = (HttpConnection) Connector.open(url); hc.setRequestProperty("User", "alagu"); hc.setRequestProperty("pass", "mypassword");

ma non ha funzionato.

Qualcuno ha già eseguito l'autenticazione HTTP basata su j2me? Grazie in anticipo.

+0

hey hi Alagu, come avete risolto questo problema. Come hai fatto l'Autenticazione di base, puoi per favore darmi un'idea di come eseguire un'autenticazione di base. in j2me ... per favore –

+0

@SajidShaikh Ho provato la soluzione di wds e ha funzionato. – Alagu

risposta

11

Potrebbe essere J2ME non supporta l'autenticazione di base, potrei sbagliarmi. Se vuoi provare a impostare l'intestazione di autenticazione nella richiesta, probabilmente avrai bisogno di un'intestazione diversa da quella che stai utilizzando.

Dal rfc:

Per ricevere l'autorizzazione, il client invia l'ID utente e la password, separati da un solo due punti (":") carattere, all'interno di un base64 [7] stringa codificata in credenziali.

[...]

Se l'agente utente desidera inviare l'userid "Aladdin" e la password "Apriti Sesamo", sarebbe utilizzare il seguente campo di intestazione:

Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== 

Quindi basta creare la stringa "Utente: Password", codificare base64 e chiamare setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)

+0

Grazie WDS, ha funzionato! – Alagu

+4

Per rendere le cose più divertenti, J2ME non include un codificatore Base64 in MIDP 2.0. Alcuni fornitori forniscono il proprio, quindi fai attenzione importandoli (Sun's WTK ne ha uno, ma è solo nel WTK). Dal suo aspetto, è meglio includere il proprio, come ad esempio: http://java.sun.com/docs/books/j2mewireless/examples/src/examples/netclient/BasicAuth.java –

3

Incredibile, funziona come un fascino:

String url = "hppt://www.example.com"; 
HttpConnection hc = (HttpConnection) Connector.open(url); 
hc.setRequestProperty("Authorization", "Basic "+ BasicAuth.encode("user", "password")); 
1

Ho usato l'Encoder/Decoder Base64 della libreria crittografica di Bouncy Castle. È molto potente per superare molte limitazioni impostate dall'API Java ME/J2ME. È open source e funziona sia per Java ME che per Android.