2011-07-21 54 views
40

JAX-WS web servisine SOAP istekleri göndermek için Jersey istemci API'sini kullanıyorum. Varsayılan olarak Jersey, bir şekilde itiraz edildiğinde kimlik doğrulama için Windows Nt kimlik bilgilerini kullanmaktadır. Jersey'in bunu kodda yaptığını kimse anlatabilir mi? Ve iptal edilebilir mi?Jersey Client API - kimlik doğrulaması

I HTTPBasicAuthFilter kullanılarak ve istemci üzerinde bir filtre olarak ilave çalıştılar. Ayrıca, WebResoruce queryParams alanına kimlik bilgilerimi eklemeyi de denedim, ancak ikisi de alınıyor.

cevap

65

İlk başta bu çalışma var. Bazı araştırmalardan sonra Jersey'in kullanması daha kolay olan bir HTTPBasicAuthFilter olduğunu keşfettim.

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

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

+0

Tam olarak aradığım şey buydu. Bunu istemciye ekledim ve sunucu parçasında Spring Security'i kullandım. Uygulamaya güvenlik eklemek için çok zarif bir şekilde çalıştı. – bh5k

+0

Jersey 2.x için aşağıdaki yanıtı inceleyin. – Dejell

+0

Bunu yaptım: 'HTTPBasicAuthFilter özelliği = yeni HTTPBasicAuthFilter (restUsername, restPassword); client.addFilter (özellik); 'ancak bilinmeyen bir nedenden ötürü 'null' özelliğini almaya devam ediyorum. Neden olur, bir fikrin var mı? – HitchHiker

12

Client authentication hakkında Jersey Kullanıcı kılavuzunda küçük bir bölümü var. Tavsiyesini takip etmenizi ve HttpURLConnection yerine Apache HTTP Client kullanmayı denemenizi tavsiye ederim. küresel bir Doğrulayıcıyı ayarı dayanıyordu olarak bu gibi değildi Ancak Jersey Kullanma kılavuzunda

Authenticator.setDefault (authinstance); 

belgelenen olarak

24

Jersey 2.x:

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

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

Client client = ClientBuilder.newClient(clientConfig); 

Referans: 5.9.1. Http Authentication Support

+3

ya: Tepki cevabı = client.target ("http: // localhost: 8080/dinlenme/homer/kontak") .request() .property (HTTP_AUTHENTICATION_BASIC_USERNAME, "homer") .property (HTTP_AUTHENTICATION_BASIC_PASSWORD, "p1swd745") .almak(); – Dejell

0

ihtiyaç posta/sadece bunu değiştirmek olsun, ben koymak isteği kullanıyorum SSL

olmadan çalışma kod aşağıdaki bulabilirsiniz.

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 sınıf

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 = "[email protected]"; 


      //{"userId":"12345","name ":"Viquar","surname":"Khan","email":"[email protected]"} 





      Employee employee = new Employee("Viquar", "Khan", "[email protected]"); 


      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

Ben de artık alakalı değildir Jersey eski sürümleri için cevap bulmak tutmak gibi bu cevabı ekleme 2 kere.

Jersey 2 için çeşitli yollar vardır. bir göz atın:

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

İşte benim için çalışıyor biridir (en basit temel kimlik doğrulaması 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)); 
0

For jersey 2 için.x her isteği temel kimlik doğrulama (önleme modu) ile doğrulamak için bunu yapabilirsiniz:

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