Adding authorization header to Jersey SSE Client request

jersey client add header to all requests
jersey client add multiple headers
how to add request header in rest client java
httpauthenticationfeature
jersey client basic authentication example
jersey 2 client ssl example
clientrequestcontext add header
how to add header in rest api

I am using Jersey client to connect to an SSE stream. The server requires that I add a header to the http request for authorization, but I can't figure out how to add the header.

Here is my code:

Client client = ClientBuilder.newBuilder().register(SseFeature.class).build();
WebTarget target = client.target(baseurl + "/v1/devices/events/");
eventSource = EventSource.target(target).build();
eventSource.register(getEventListener());
eventSource.open();

Here is an example of the header I need to add:

Authorization: Bearer 38bb7b318cc6898c80317decb34525844bc9db55

It would be something like this for Basic Authentication:

Client client = ClientBuilder.newClient();
HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder().build();
client.register(feature);
client.register(SseFeature.class);
WebTarget target = client.target(baseurl + "/v1/devices/events/")
    .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_USERNAME, "...")
    .property(HttpAuthenticationFeature.HTTP_AUTHENTICATION_BASIC_PASSWORD, "...");

...

You already get the password encoded by Jersey.

And if it is a token:

Client client = ClientBuilder.newClient();
WebTarget target = client.target(baseurl + "/v1/devices/events/")
    .request("...")     
    .header(HttpHeaders.AUTHORIZATION, "Bearer " + "... encoded token ...");

Hope it helps!

Add a Header to a Jersey SSE Client Request, Explore how to add headers to SSE client requests in Jersey using the proper way to send basic key/value headers, authentication headers,  In this tutorial, we'll see an easy way to send headers in Server-Sent Event (SSE) client requests using the Jersey Client API. We'll also cover the proper way to send basic key/value headers, authentication headers, and restricted headers using the default Jersey transport connector.

// Using SSL + Header Key 
uri = UriBuilder.fromUri(sslUrl).port(sslServerPort).build();
sslConfig = SslConfigurator.newInstance().trustStoreFile(trustStoreFile).trustStorePassword(trustStorePassword);
sslContext = sslConfig.createSSLContext();
client = ClientBuilder.newBuilder().sslContext(sslContext).build();
target = client.target(uri).path(path);
Entity<?> entity = Entity.entity(Object, MediaType.APPLICATION_JSON);
response = target.request().header("key","value").post(entity);


// Using UserName & Password + Header Key 
uri = UriBuilder.fromUri(url).port(serverPort).build();
basicAuth = HttpAuthenticationFeature.basic(username, userPassword);
client = ClientBuilder.newBuilder().register(basicAuth).build();
target = client.target(uri).path(path);
Entity<?> entity = Entity.entity(Object, MediaType.APPLICATION_JSON);
response = target.request().header("key","value").post(entity);

// Using only Header Key 
uri = UriBuilder.fromUri(url).port(serverPort).build();
client = ClientBuilder.newBuilder().build();
target = client.target(uri).path(path);
Entity<?> entity = Entity.entity(Object, MediaType.APPLICATION_JSON);
response = target.request().header("key","value").post(entity);

Hope this helps you with your problem.

Jersey client authorization header, Now I want to use Jersey Client to authenticate to my web pages and I think I The server requires that I add a header to the http request for authorization, but I In user on the target Adding authorization header to Jersey SSE Client request​  * Add a Header to a Jersey SSE Client Request (cherry picked from commit ee70714e7885cf8713e9c2698a8a8d93fb6a53c8) * Class and Methods rename

In case someone would want to add the bearer token header at the Client entity level itself, rather than at the Request entity level (in my case I had a factory method for returning preconfigured Client entities, so I had no way of adding the authorization header within the factory method, as .header(...) becomes available only after you go through the ClientBuilder.newBuilder().register(...).build().target(...).request(...) call chain, as of Jersey 2.x):

// client is a javax.ws.rs.client.Client entity
Feature feature = OAuth2ClientSupport.feature("YOUR_BEARER_TOKEN");
client.register(feature);
// now you can use client.target(...).request(...).post(...), without calling .header(...) after .request(...)

Unfortunately (as you may have guessed) this requires a new dependency: org.glassfish.jersey.security:oauth2-client

<dependency>
  <groupId>org.glassfish.jersey.security</groupId>
  <artifactId>oauth2-client</artifactId>
  <version>2.15</version>
</dependency>

java, I'm Jersey customers use to connect to an SSE stream. Server that I need any header to http request for authorization, but I can not figure out  The API contains SSE support for both - server and client. To use the Jersey-specific SSE API, you need to add the dependency to the In order to add support for this SSE implementation, you also need to include the dependency to the SSE media type module the same way as for the JAX-RS SSE implementation.

Here is the complete examples

ClientConfig clientConfig = new ClientConfig();
Client client = ClientBuilder.newClient(clientConfig);
WebTarget webTarget = client.target("http://localhost:8080/MyApp/customer/");
Invocation.Builder invocationBuilder = 
webTarget.request(MediaType.APPLICATION_JSON).header(HttpHeaders.AUTHORIZATION, "your 
secret key");
response = invocationBuilder.get();
output = response.readEntity(String.class);

Chapter 15. Security, The injected security context depends on the actual Jersey application The example secures two kinds of URI namespaces using the HTTP Basic Authentication. rest/admin/* will be to add any OAuth 1 support to the Jersey Client (build an Authorization flow or Server-Sent Events (SSE) Support, Home, Chapter 16. 25 Adding authorization header to Jersey SSE Client request 6 Adding column to sqlite database May 15 '17. 6 Blank line below headers created when using

Try this:

Invocation.Builder invocationBuilder = target.request(MediaType.APPLICATION_JSON).header(HttpHeaders.AUTHORIZATION, "Bearer38bb7b318cc6898c80317decb34525844bc9db55");

How to add Headers on RESTful call using Jersey Client API, HEADERS: Content-Type: application/json;charset=UTF-8 Authorization: Add a Header to a Jersey SSE Client Request, In this tutorial, we'll see an easy way  I have an HttpClient that I am using for a REST API. However I am having trouble setting up the Authorization header. I need to set the header to the token I received from doing my OAuth request.

Jersey REST Client Authentication Example, BASIC NON-PREEMPTIVE – It's non-preemptive authentication way i.e. auth information is added only when server refuses the request with 401 status code  Obtaining ListenableFuture<Response> from Jersey/Guava Client 6.13. Extending RxIvoker 6.14. Extending RxInvokerProvider 7.1. Using File with a specific media type to produce a response 7.2. Returning 201 status code and adding Location header in response to POST request 7.3.

[PDF] Jersey 2.2 User Guide, Jersey Server-Sent Events API . Consuming SSE events with Jersey clients . client/filter/HttpBasicAuthFilter.html] to add authentication header to requests  1. Jersey Client – HttpAuthenticationFeature. HttpAuthenticationFeature class provides HttpBasic and Digest client authentication capabilities. The feature work in one of 4 modes i.e. BASIC, BASIC NON-PREEMPTIVE, DIGEST and UNIVERSAL.

How To Set Bearer Authorization Header In Java, When you make a get an access token call, set the Authorization header to Add a Header to a Jersey SSE Client Request. public class JwtAuthenticationFilter. on client the authorization header is present; on res.RequestMessage - the Test header is present, but not the Authorization header. the commented line did not work either, interestingly though, if both it and the line above are left un-commented, An exception is thrown: Cannot add value because header 'Authorization' does not support multiple

Comments
  • I actually need to use the header because I have a key, not a username & password. The question has been edited to make it more clear. Sorry.
  • I've edited it... Left the user/password part in case it helps somebody else. In the case of the token you don't need the auth feature. Hope it helps!
  • My WebTarget object (javax.ws.rs.client.WebTarget) does not have a header() method. I have tried this but it has no effect: target.request().header("Authorization", "Bearer " + token);
  • Sorry you are right it is indeed after the request. I've edited my answer. What version of Jersey are you using? Could you post your dependencies? (pom.xml or equivalent) What do you mean by "no effect"? Have you debugged to see if the HTTP header is there?
  • POM By no effect, I mean the header was not there. Test
  • Looks interesting. What does the MapBuilder look like being used for the implementation of ISseHeaderProvider?