2017-08-13 9 views
0

こんにちは、私はfeignクライアントとouth2で新しいです。私は春のブート1.5.6を使用しています。私は書いていないリモートWebサービスにログインしたい。このWebサービスはouth2を使用します。私はそのWebサービスから私のfeignクライアントにアクセストークンを取得したいと思います。私は春のブートフェーンクライアントからリモートWebサービスにログインするには

よう

マイ装うクライアント:

com.netflix.client.ClientException: Load balancer does not have available server for client: feignGateAway

答えて

0

あなたは

package org.roshan.ihs.client; 

import java.lang.annotation.Documented; 
import java.lang.annotation.ElementType; 
import java.lang.annotation.Retention; 
import java.lang.annotation.RetentionPolicy; 
import java.lang.annotation.Target; 

import org.springframework.cloud.netflix.feign.FeignClient; 
import org.springframework.cloud.netflix.feign.FeignClientsConfiguration; 
import org.springframework.core.annotation.AliasFor; 

@Retention(RetentionPolicy.RUNTIME) 
@Target(ElementType.TYPE) 
@Documented 
@FeignClient 
public @interface AuthorizedFeignClient { 

    @AliasFor(annotation = FeignClient.class, attribute = "name") 
    String name() default ""; 

    /** 
    * A custom <code>@Configuration</code> for the feign client. 
    * 
    * Can contain override <code>@Bean</code> definition for the pieces that 
    * make up the client, for instance {@link feign.codec.Decoder}, 
    * {@link feign.codec.Encoder}, {@link feign.Contract}. 
    * 
    * @see FeignClientsConfiguration for the defaults 
    */ 
    @AliasFor(annotation = FeignClient.class, attribute = "configuration") 
    Class<?>[] configuration() default OAuth2InterceptedFeignConfiguration.class; 

    /** 
    * An absolute URL or resolvable hostname (the protocol is optional). 
    */ 
    String url() default ""; 

    /** 
    * Whether 404s should be decoded instead of throwing FeignExceptions. 
    */ 
    boolean decode404() default false; 

    /** 
    * Fallback class for the specified Feign client interface. The fallback class must 
    * implement the interface annotated by this annotation and be a valid spring bean. 
    */ 
    Class<?> fallback() default void.class; 

    /** 
    * Path prefix to be used by all method-level mappings. Can be used with or without 
    * <code>@RibbonClient</code>. 
    */ 
    String path() default ""; 
} 





@Configuration 
public class OAuth2InterceptedFeignConfiguration { 

    private JHipsterProperties jHipsterProperties; 

    private LoadBalancerClient loadBalancerClient; 

    @Bean(name = "oauth2RequestInterceptor") 
    public RequestInterceptor getOAuth2RequestInterceptor() throws IOException { 
     if (loadBalancerClient != null) { 
      jHipsterProperties.getSecurity().getClientAuthorization().setLoadBalancerClient(loadBalancerClient); 
     } 
     return new OAuth2FeignRequestInterceptor(
      new DefaultOAuth2ClientContext(), jHipsterProperties.getSecurity().getClientAuthorization() 
     ); 
    } 

    @Inject 
    public void setjHipsterProperties(JHipsterProperties jHipsterProperties) { 
     this.jHipsterProperties = jHipsterProperties; 
    } 

    @Autowired(required = false) 
    public void setLoadBalancerClient(LoadBalancerClient loadBalancerClient) { 
     this.loadBalancerClient = loadBalancerClient; 
    } 
} 

を装うと装うを変更するにはOAuthの設定を追加します。

@FeignClient(name = "feignclient", url ="BASE_URL") 

    public interface FeignGateAway{ 
     @RequestMapping(method = RequestMethod.POST, value = "BASE_URL/oauth/token?" 
       + "client_id=client_id" 
       + "&client_secret=client_sercret" 
       + "&username=email" 
       + "&password=password" 
       + "&grant_type=password" 
       + "&redirect_uri=urn:ietf:wg:oauth:2.0:oob") 
     Object login(); 
    } 

私はこのエラーを取得するリクエストを送信しますこのようにするクライアント

@AuthorizedFeignClient(name = "notification-service") 
public interface NotificationServiceClient { 

    @RequestMapping(path = "notifications/email/send", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) 
    public void sendMail(@RequestParam("to") String to, @RequestParam("subject") String subject, @RequestParam("body") String body); 

} 
関連する問題