users@jersey.java.net

Re: [Jersey] Jersey Client and Basic Authentication

From: Mike Jones <mike.a.jones_at_gmail.com>
Date: Sun, 24 Aug 2008 19:41:44 +0100

Hi

I've had as quick go at creating a filter for basic authentication. It
works well for my tests and uses the Base64 encoder provided with
commons-codec:

<snip>
public class BasicAuthenticationClientFilter extends ClientFilter {

    public BasicAuthenticationClientFilter(final String username,
final String password) {
        this.username = username;
        this.password = password;
    }

    public ClientResponse handle(ClientRequest clientRequest) throws
ClientHandlerException {

        // encode the password
        byte[] encoded = Base64.encodeBase64((username + ":" +
password).getBytes());

        // add the header
        List<Object> headerValue = new ArrayList<Object>();
        headerValue.add("Basic " + new String(encoded));
        clientRequest.getMetadata().put("Authorization", headerValue);

        return getNext().handle(clientRequest);
    }

    private String username;
    private String password;
}
</snip>

I'd like to make it more robust and useful as a contribution to
jersey. I need some tests for it and was also wondering if it should
check for the username and the password in the URI:
http://mike:secret@localhost/ ? Any thoughts?

Cheers
Mike

2008/8/20 Mike Jones <mike.a.jones_at_gmail.com>:
> Hi Marc
>
> That worked a treat for the one test I wrote - I think I'll need to
> call a Authenticator.setDeault(null) on the tearDown to stop specific
> the credentials going across more than one test.
>
> Paul's idea about the Filter is interesting - I suppose using that you
> can support conventions like http://mike:secret@example.org/
>
> Thanks for the help
>
> Cheers
> Mike
>
> 2008/8/20 Marc Hadley <Marc.Hadley_at_sun.com>:
>> Try adding the following to your code before you use the client API:
>>
>> final String username ="...";
>> final String password ="...";
>> Authenticator.setDefault(new Authenticator() {
>> protected PasswordAuthentication getPasswordAuthentication() {
>> return new PasswordAuthentication (username, password.toCharArray());
>> }
>> });
>>
>> HTH,
>> Marc.
>>
>> On Aug 20, 2008, at 6:45 AM, Mike Jones wrote:
>>
>>> Hello
>>>
>>> I'm using Jersey with Spring security and I'm in the process of
>>> creating some tests that use embedded Jetty and the Jersey client. I
>>> need to perform some basic authentication with the client - do I need
>>> to encode the credentials in Base64 myself and add them to the headers
>>> in the jersey client? Am I missing some nice (and probably obvious)
>>> helper methods for this?
>>>
>>> Cheers
>>> Mike
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>>
>>
>> ---
>> Marc Hadley <marc.hadley at sun.com>
>> CTO Office, Sun Microsystems.
>>
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: users-unsubscribe_at_jersey.dev.java.net
>> For additional commands, e-mail: users-help_at_jersey.dev.java.net
>>
>>
>