HTTP authentication in J2ME

邮差的信 提交于 2019-12-29 06:56:34

问题


I'm trying to create a J2ME app, which talks to webserver using HttpConnection connector.

When I am talking to the WebServer, I have to authenticate using Basic HTTP auth, which normally goes like

http://username:password@website.com/rest/api/method

But in J2ME, when I construct a url of this form, it doesn't work.

I also tried adding request property, hc = (HttpConnection) Connector.open(url); hc.setRequestProperty("User", "alagu"); hc.setRequestProperty("pass", "mypassword");

but didn't work.

Has anyone done j2me based HTTP auth before? Thanks in advance.


回答1:


It could be J2ME has no support for basic authentication, I might be wrong. If you want to try just setting the authentication header in the request yourself you'll likely need a different header then what you're using.

From the rfc:

To receive authorization, the client sends the userid and password, separated by a single colon (":") character, within a base64 [7] encoded string in the credentials.

[...]

If the user agent wishes to send the userid "Aladdin" and password "open sesame", it would use the following header field:

 Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

So just create the string "User:Password", base64 encode it and then call setRequestProperty("Authorization", "Basic "+ encodedUserAndPass)




回答2:


Incredible, it works like a charm:

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



回答3:


I used Bouncy Castle cryptographic library's Base64 Encoder/Decoder. It is very powerful in overcoming lots of limitations set by Java ME/J2ME API. It's open-source and it works for both Java ME and Android.



来源:https://stackoverflow.com/questions/950885/http-authentication-in-j2me

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!