泽西岛客户端API – authentication

我正在使用Jersey客户端API将SOAP请求提交给JAX-WS webservice。 默认情况下泽西是在某种程度上使用我的Windows NTauthentication时挑战挑战。 任何人都可以解释泽西在代码中做了什么? 它可以被覆盖吗?

我曾尝试使用HTTPBasicAuthFilter并添加为客户端上的筛选器。 我也尝试将我的凭据添加到WebResoruce queryParams字段,但是都没有被拿起。

起初,我按照“泽西岛用户指南”中的logging得到了这个工作

Authenticator.setDefault (authinstance); 

但是我不喜欢这个,因为它依靠设置一个全球authentication者。 经过一番研究,我发现Jersey有一个HTTPBasicAuthFilter ,它更易于使用。

 Client c = Client.create(); c.addFilter(new HTTPBasicAuthFilter(user, password)); 

请参阅: 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)

泽西岛2.x:

 HttpAuthenticationFeature feature = HttpAuthenticationFeature.basicBuilder() .nonPreemptive() .credentials("user", "password") .build(); ClientConfig clientConfig = new ClientConfig(); clientConfig.register(feature) ; Client client = ClientBuilder.newClient(clientConfig); 

参考: 5.9.1。 HTTP身份validation支持

泽西岛用户指南中有一小部分关于客户端身份validation 。 我build议你遵循它的build议,并尝试使用Apache HTTP客户端而不是HttpURLConnection,因为它对任何你想做的事情有更好的支持。

添加这个答案,因为我一直在找旧版泽西岛的答案,而这些答案在2.x中已经不再相关了。

泽西岛2有几种方法。 看一眼:

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

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

  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) ); 

如果你正在testing一个Dropwizard应用程序(也许它适合于任何REST服务),你可以使用这个例子: https : //github.com/dropwizard/dropwizard/blob/v0.8.1/dropwizard-auth/src/test/爪哇/ IO / dropwizard / auth /中基本/ BasicAuthProviderTest.java

请find没有SSL的以下工作代码

我正在使用放置请求,如果需要后/得到只是改变它。

的pom.xml

 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.javacodegeeks.enterprise.rest.jersey</groupId> <artifactId>JerseyJSONExample</artifactId> <version>0.0.1-SNAPSHOT</version> <repositories> <repository> <id>maven2-repository.java.net</id> <name>Java.net Repository for Maven</name> <url>http://download.java.net/maven/2/</url> <layout>default</layout> </repository> </repositories> <dependencies> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-client</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-json</artifactId> <version>1.9</version> </dependency> </dependencies> </project> 

Java类

 package com.rest.jersey.jerseyclient; import com.rest.jersey.dto.Employee; import com.sun.jersey.api.client.Client; import com.sun.jersey.api.client.ClientResponse; import com.sun.jersey.api.client.WebResource; import com.sun.jersey.api.client.config.ClientConfig; import com.sun.jersey.api.client.config.DefaultClientConfig; import com.sun.jersey.api.client.filter.HTTPBasicAuthFilter; import com.sun.jersey.api.client.filter.LoggingFilter; import com.sun.jersey.api.json.JSONConfiguration; public class JerseyClient { public static void main(String[] args) { try { String username = "username"; String password = "p@ssword"; //{"userId":"12345","name ":"Viquar","surname":"Khan","email":"Vaquar.khan@gmail.com"} Employee employee = new Employee("Viquar", "Khan", "Vaquar.khan@gmail.com"); ClientConfig clientConfig = new DefaultClientConfig(); clientConfig.getFeatures().put( JSONConfiguration.FEATURE_POJO_MAPPING, Boolean.TRUE); Client client = Client.create(clientConfig); // final HTTPBasicAuthFilter authFilter = new HTTPBasicAuthFilter(username, password); client.addFilter(authFilter); client.addFilter(new LoggingFilter()); // WebResource webResource = client .resource("http://localhost:7001/VaquarKhanWeb/employee/api/v1/informations"); ClientResponse response = webResource.accept("application/json") .type("application/json").put(ClientResponse.class, employee); if (response.getStatus() != 200) { throw new RuntimeException("Failed : HTTP error code : " + response.getStatus()); } String output = response.getEntity(String.class); System.out.println("Server response .... \n"); System.out.println(output); } catch (Exception e) { e.printStackTrace(); } } } 

POJO

 package com.rest.jersey.dto; public class Employee { private String name; private String surname; private String email; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSurname() { return surname; } public void setSurname(String surname) { this.surname = surname; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } @Override public String toString() { return "Employee [name=" + name + ", surname=" + surname + ", email=" + email + "]"; } public Employee(String name, String surname, String email) { super(); this.name = name; this.surname = surname; this.email = email; } } 

对于泽西2.x,您可以通过基本身份validation(抢占模式)来validation每个请求。

  client.register(HttpAuthenticationFeature.basic(userName, password)); // rest invocation code ..