как добавить заголовок в JAXRSClientFactoryBean или JAXRSClientFactory - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь использовать JAXRSClientFactoryBean или JAXRSClientFactory следующим образом:

JAXRSClientFactoryBean пример

Map<String, String> headerMap = new HashMap<String, String>();
headerMap.put("X-XSRF-TOKEN", "dummy_token");
headerMap.put("Cookie", "XSRF-TOKEN=dummy_token");
headerMap.put("Content-Type", "application/x-www-form-urlencoded");
headerMap.put("Accept", "application/json, text/plain, */*");

headerMap.put("Connection", "keep-alive");
headerMap.put("Host", "localhost.fr:8080");
headerMap.put("Referer", "http://localhost:8080/");

JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
bean.setHeaders(headerMap);
bean.setResourceClass(SampleService.class);
bean.setAddress("http://localhost:8080/");
bean.setUsername("test");
bean.setPassword("test");
bean.setInheritHeaders(true);
SampleService test1 = bean.create(SampleService.class);
System.out.println(test1.getUser(1l));

JAXRSClientFactory пример 1009

SampleService sampleService = JAXRSClientFactory.create("http://localhost:8080/", SampleService.class, "test", "test", null);

System.out.println(sampleService.getUser(1l));

SampleService

import javax.ws.rs.Consumes;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import org.springframework.http.ResponseEntity;

    @Path("/api")
    public interface SampleService {
      @GET
      @Path("/users/{id}")
      @Produces(MediaType.APPLICATION_JSON)
      @Consumes(MediaType.APPLICATION_JSON)
      public ResponseEntity<XUser> getUser(@PathParam("id") Long id);    
    }

в обоих случаях я получаю исключение ниже

Exception in thread "main" javax.ws.rs.NotAuthorizedException: HTTP 401 Unauthorized
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
at org.apache.cxf.jaxrs.client.AbstractClient.convertToWebApplicationException(AbstractClient.java:505)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.checkResponse(ClientProxyImpl.java:319)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.handleResponse(ClientProxyImpl.java:827)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.doChainedInvocation(ClientProxyImpl.java:789)
at org.apache.cxf.jaxrs.client.ClientProxyImpl.invoke(ClientProxyImpl.java:230)
at com.sun.proxy.$Proxy13.getXUser(Unknown Source)
at com.exadatum.xcatalyst.xstudio.publisher.AuthenticatorJAXRS.main(AuthenticatorJAXRS.java:55)

, потому что я использовал класс SecurityConfiguration веснойдля аутентификации типа loginProcessingUrl("/api/authentication")

Так что всем, кто сталкивался с этой проблемой, пожалуйста, помогите.Любые указатели / предложения приветствуются

1 Ответ

0 голосов
/ 18 октября 2018

Возможно, я думаю об очевидном, но похоже, что пользователь действительно не авторизован:).

Не могли бы вы убедиться, что ваш класс SecurityConfiguration имеет доступ к вашей информации о пользователе (имя пользователя: test / password: test)?В целях тестирования вы можете настроить глобальные определения безопасности с помощью inMemoryAuthentication ().

...