Autenticação HTTP em J2ME
Pergunta
Eu estou tentando criar um aplicativo J2ME, que fala com servidor web usando o conector HttpConnection
.
Quando eu estou falando com o servidor web, eu tenho que autenticar usando Básica HTTP auth, que normalmente vai como
http://username:password@website.com/rest/api/method
Mas, em J2ME, quando eu construir um url desta forma, ele não funciona.
Eu também tentei adicionar pedido de propriedade,
hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("User", "alagu");
hc.setRequestProperty("pass", "mypassword");
mas não funcionou.
Alguém já fez J2ME com base HTTP auth antes? Agradecemos antecipadamente.
Solução
Poderia ser J2ME não tem suporte para autenticação básica, eu poderia estar errado. Se você quiser tentar apenas definir o cabeçalho de autenticação na solicitação se você provavelmente vai precisar de um cabeçalho diferente, então o que você está usando.
A partir da RFC :
Para receber a autorização, o cliente envia o ID de usuário e senha, separados por um único cólon ( ":") personagem, dentro de uma base 64 [7] string codificada nas credenciais.
[...]
Se o agente usuário deseja enviar o userid "Aladdin" e senha "Abre-te sésamo", ele usaria o seguinte campo de cabeçalho:
Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Então, basta criar a string "Usuário: Password", base64 codificá-lo e, em seguida, chamar setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)
Outras dicas
Incrível, ele funciona como um encanto:
String url = "hppt://www.example.com";
HttpConnection hc = (HttpConnection) Connector.open(url);
hc.setRequestProperty("Authorization", "Basic "+ BasicAuth.encode("user", "password"));
Eu usei do Castelo Insuflável biblioteca criptográfica Base64 codificador / decodificador. É muito poderoso para superar muitas limitações estabelecidas pelo Java ME / J2ME API. É open-source e funciona tanto para Java ME e Android.