0

FeignClient在我的应用程序中定义了 REST:

@FeignClient(name = "gateway", configuration = FeignAuthConfig.class)
public interface AccountsClient extends Accounts {

}

我在服务器和客户端之间共享端点接口:

@RequestMapping(API_PATH)
public interface Accounts {


    @PostMapping(path = "/register",
            produces = APPLICATION_JSON_VALUE,
            consumes = APPLICATION_JSON_VALUE)
    ResponseEntity<?> registerAccount(@RequestBody ManagedPassUserVM managedUserDTO)
            throws EmailAlreadyInUseException, UsernameAlreadyInUseException, URISyntaxException;

}

FeignClient除了我在客户端应用程序中的定义也被注册为独立的 REST 端点之外,一切都很好。

目前,我尝试使用过滤器来防止这种行为,该过滤器在我的客户端应用程序中返回客户端映射的404状态代码。FeignClinet然而,这个工作似乎很不优雅。

还有另一种方法可以防止假装客户端注册为单独的 REST 端点吗?

4

2 回答 2

1

对于这个错误的 Spring Framework 行为,我使用了解决方法:

@Configuration
@ConditionalOnClass({Feign.class})
public class FeignMappingDefaultConfiguration {
    @Bean
    public WebMvcRegistrations feignWebRegistrations() {
        return new WebMvcRegistrationsAdapter() {
            @Override
            public RequestMappingHandlerMapping getRequestMappingHandlerMapping() {
                return new FeignFilterRequestMappingHandlerMapping();
            }
        };
    }

    private static class FeignFilterRequestMappingHandlerMapping extends RequestMappingHandlerMapping {
        @Override
        protected boolean isHandler(Class<?> beanType) {
            return super.isHandler(beanType) && (AnnotationUtils.findAnnotation(beanType, FeignClient.class) == null);
        }
    }
}

我在 SpringCloud问题中找到了它

于 2017-01-19T16:43:17.177 回答
1

这是 Spring Cloud 的 feign 支持的一个已知限制。通过添加@RequestMapping到接口,Spring MVC(不是 Spring Cloud)假定您想要作为端点。@RequestMapping目前不支持在 Feign 接口上。

于 2017-01-18T17:07:40.863 回答