Qui*_*ick 15 java authorization jersey http-headers server-sent-events
我正在使用Jersey客户端连接到SSE流.服务器要求我向http请求添加标头以进行授权,但我无法弄清楚如何添加标头.
这是我的代码:
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();
Run Code Online (Sandbox Code Playgroud)
以下是我需要添加的标头示例:
Authorization: Bearer 38bb7b318cc6898c80317decb34525844bc9db55
Run Code Online (Sandbox Code Playgroud)
lrn*_*cig 22
对于基本身份验证,它会是这样的:
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, "...");
Run Code Online (Sandbox Code Playgroud)
...
您已经获得了Jersey编码的密码.
如果它是一个令牌:
Client client = ClientBuilder.newClient();
WebTarget target = client.target(baseurl + "/v1/devices/events/")
.request("...")
.header(HttpHeaders.AUTHORIZATION, "Bearer " + "... encoded token ...");
Run Code Online (Sandbox Code Playgroud)
希望能帮助到你!
如果有人想在Client实体级别本身而不是在Request实体级别添加不记名令牌标头(在我的情况下,我有一个返回预配置Client实体的工厂方法,因此我无法在工厂中添加授权标头方法,.header(...)只有在您通过ClientBuilder.newBuilder().register(...).build().target(...).request(...)调用链后才可用,从 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(...)
Run Code Online (Sandbox Code Playgroud)
不幸的是(你可能已经猜到了)这需要一个新的依赖: org.glassfish.jersey.security:oauth2-client
<dependency>
<groupId>org.glassfish.jersey.security</groupId>
<artifactId>oauth2-client</artifactId>
<version>2.15</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)
这是完整的示例
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);Run Code Online (Sandbox Code Playgroud)
Jersey 客户端的依赖关系
<dependency>
<groupId>org.glassfish.jersey.core</groupId>
<artifactId>jersey-client</artifactId>
<version>2.25.1</version>
</dependency>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
38873 次 |
| 最近记录: |