Jersey Client API-authentification

j'utilise L'API Client De Jersey pour soumettre des requêtes SOAP à un service web JAX-WS. Par défaut, Jersey utilise d'une manière ou d'une autre mes justificatifs D'identité Windows Nt pour l'authentification lorsqu'ils sont contestés. Est-ce que Quelqu'un peut expliquer où Jersey fait ça dans le code? Et peut-il être remplacé?

j'ai essayé D'utiliser HTTPBasicAuthFilter et d'ajouter comme filtre sur le Client. J'ai aussi essayé d'ajouter mes informations d'identification de la WebResoruce queryParams champ, ni chercher.

43
demandé sur cduggan 2011-07-21 14:16:43

7 réponses

Au début, j'ai eu ce travail, comme l'indique le Maillot guide de l'Utilisateur

Authenticator.setDefault (authinstance);

cependant je n'ai pas aimé cela car il reposait sur la mise en place d'un authentificateur global. Après quelques recherches j'ai découvert que Jersey a un HTTPBasicAuthFilter ce qui est encore plus facile à utiliser.

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

Voir: 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)

68
répondu iain 2017-05-24 08:25:36

Maillot 2.x:

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

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

Client client = ClientBuilder.newClient(clientConfig);

Référence: 5.9.1. Prise En Charge De L'Authentification Http

30
répondu 卢声远 Shengyuan Lu 2018-01-03 13:00:09

il y a une petite section dans le guide de L'utilisateur de Jersey à propos de authentification du Client. Je vous recommande de suivre ses conseils et essayez d'utiliser Client HTTP Apache au lieu de HttpURLConnection, car il a un meilleur support pour à peu près tout ce que vous voulez faire.

12
répondu Ryan Stewart 2011-07-21 14:51:52

ajouter cette réponse alors que je continue à trouver des réponses pour les versions plus anciennes De Jersey qui ne sont plus pertinentes dans 2.x.

Pour Jersey 2 Il y a plusieurs façons. Jetez un oeil à:

JavaDoc pour org.glassfish.Jersey.client.Authentication.HttpAuthenticationFeature

Voici celui qui fonctionne pour moi (plus simple auth de base IMHO).

    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) );
2
répondu Michael Pawlowsky 2016-07-26 22:49:09

si vous testez une application Dropwizard (peut-être convient à n'importe quel service de repos), vous pouvez l'utiliser comme un exemple: https://github.com/dropwizard/dropwizard/blob/v0.8.1/dropwizard-auth/src/test/java/io/dropwizard/auth/basic/BasicAuthProviderTest.java

1
répondu Thiago 2015-05-07 18:40:09

s'il vous Plaît trouver de travail suivants du code sans SSL

j'utilise put request , si besoin post / get just change it.

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>

Classe 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;
    }

}
0
répondu vaquar khan 2015-11-03 13:38:13

Oui pour jersey 2.x vous pouvez faire ceci pour authentifier chaque requête avec l'auth de base (mode préventif):

 client.register(HttpAuthenticationFeature.basic(userName, password));
 // rest invocation code ..
0
répondu Dzmitry Hubin 2017-05-31 10:15:30