2017-08-13 93 views
0

嗨,我是虚假客户端和outh2新手。我正在使用1.5.6的弹簧引导。我想登录远程web服务,这是我没有写。这个webservice使用outh2。我想从该Web服务获取访问令牌给我的假客户端。如何从春季开机假客户端登录到远程webservice

我假死的客户,如:

@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(); 
    } 

当我发送请求我得到这个错误:

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

回答

0

您将添加的OAuth配置假装

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

,改变佯客户喜欢这个

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

}