Jersey客户端API - 身份验证

cdu*_*gan 46 authentication client jersey

我正在使用Jersey客户端API将SOAP请求提交给JAX-WS Web服务.默认情况下,Jersey在某种程度上使用我的Windows Nt凭据进行身份验证时进行身份验证.任何人都可以解释泽西在代码中的位置吗?它可以覆盖吗?

我尝试过使用HTTPBasicAuthFilter并在客户端上添加过滤器.我也尝试将我的凭据添加到WebResoruce queryParams字段,但是都没有被提取.

iai*_*ain 71

起初,我按照泽西用户指南中的说明开始工作

Authenticator.setDefault (authinstance);
Run Code Online (Sandbox Code Playgroud)

但是我不喜欢这个,因为它依赖于设置全局身份验证器.经过一番研究后,我发现泽西岛HTTPBasicAuthFilter更容易使用.

Client c = Client.create();
c.addFilter(new HTTPBasicAuthFilter(user, password));
Run Code Online (Sandbox Code Playgroud)

请参阅:https : //jersey.github.io/nonav/apidocs/1.10/jersey/com/sun/jersey/api/client/filter/HTTPBasicAuthFilter.html https://jersey.github.io/nonav/apidocs/1.10 /jersey/com/sun/jersey/api/client/filter/Filterable.html#addFilter(com.sun.jersey.api.client.filter.ClientFilter)


卢声远*_* Lu 33

泽西2.x:

HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder()
    .nonPreemptive()
    .credentials("user", "password")
    .build();

ClientConfig clientConfig = new ClientConfig();
clientConfig.register(feature) ;

Client client = ClientBuilder.newClient(clientConfig);
Run Code Online (Sandbox Code Playgroud)

参考:5.9.1.Http身份验证支持

  • 或:响应响应= client.target("http:// localhost:8080/rest/homer/contact").request().property(HTTP_AUTHENTICATION_BASIC_USERNAME,"homer").property(HTTP_AUTHENTICATION_BASIC_PASSWORD,"p1swd745").get( ); (4认同)

Rya*_*art 12

泽西用户指南中有一小部分关于客户端身份验证.我建议你按照它的建议尝试使用Apache HTTP Client而不是HttpURLConnection,因为它可以更好地支持你想要做的任何事情.


Mic*_*sky 6

添加这个答案是因为我不断寻找旧版本 Jersey 的答案,这些版本在 2.x 中不再相关。

对于 Jersey 2 有多种方法。看一眼:

org.glassfish.jersey.client.authentication.HttpAuthenticationFeature 的 JavaDoc

这是为我工作的一个(最简单的基本身份验证恕我直言)。

    ClientConfig config = new ClientConfig();

    HttpAuthenticationFeature feature = HttpAuthenticationFeature.basic("username", "password");

    Client client = ClientBuilder.newClient(config);
    client.register(feature);

    WebTarget webTarget = client.target("http://api.asite.com/api").path("v1/reports/list");
    Invocation.Builder invocationBuilder =  webTarget.request(MediaType.TEXT_PLAIN_TYPE);

    Response response = invocationBuilder.get();

    System.out.println( response.getStatus() );
    System.out.println( response.readEntity(String.class) );
Run Code Online (Sandbox Code Playgroud)