Spring security 如何通过外部客户端使用基本的受身份验证保护的Restful web服务

Spring security 如何通过外部客户端使用基本的受身份验证保护的Restful web服务,spring-security,spring-cloud,spring-cloud-netflix,Spring Security,Spring Cloud,Spring Cloud Netflix,谢谢你抽出时间。 为了简单起见,我创建了一个示例服务,如下所示: @RestController @RequestMapping("/") public class ComputeController { @GetMapping("/add") public int add(@RequestParam("left") int left, @RequestParam("right") int right) { return left + right; }

谢谢你抽出时间。 为了简单起见,我创建了一个示例服务,如下所示:

@RestController
@RequestMapping("/")
public class ComputeController {

    @GetMapping("/add")
    public int add(@RequestParam("left") int left, @RequestParam("right") int right) {
        return left + right;
    }
}
为了保护此url,我将spring安全性配置为:

management.security.enabled=true
security.user.name=admin
security.user.password=admin
GET /add?left=100&right=11 HTTP/1.1
Authorization: ***** Hidden credentials *****
Host: localhost:7777
Connection: close
当我启动此服务并按如下方式访问时:

management.security.enabled=true
security.user.name=admin
security.user.password=admin
GET /add?left=100&right=11 HTTP/1.1
Authorization: ***** Hidden credentials *****
Host: localhost:7777
Connection: close
一切都很好

在另一个节点中,我创建了一个由netflix feign创建的“服务消费者”。这是一个Java接口

@FeignClient(name = "API-GATEWAY", path = "/compute-service", fallback = ComputeServiceCircuitBreaker.class)
public interface ComputeServiceClient {

    @RequestMapping(path = "/add", method = RequestMethod.GET)
    public Integer add(@RequestParam("left") Integer left, @RequestParam("right") Integer right);
}
但是我不知道如何配置请求头“Authorization”


有什么想法吗?再次感谢。

例如,您需要创建一个佯装客户端配置类

导入feign.auth.BasicAuthRequestInterceptor;
@配置
公共类假客户端配置{
@豆子
公共BasicAuthRequestInterceptor BasicAuthRequestInterceptor(){
返回新的BasicAuthRequestInterceptor(“admin”、“admin”);
}
}
然后在
@FeignClient
注释中使用以下配置文件:

@FeignClient(name=“service”,configuration=FeignClientConfiguration.class)

自2020年10月起,这项工作:

public class FeignClientConfiguration {

    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
        return new BasicAuthRequestInterceptor("asdf", "asdf");
    }
}


@FeignClient(name = "thirdPartyClient", url = "ceva.com",
        configuration = FeignClientConfiguration.class)
public interface ThirdPartyClient {

    @GetMapping
    Response get();
}

注意,为了不将配置应用于所有请求,我们不使用@configuration注释配置。

我找到了答案。在这里使用
@Configuration
会将此bean应用于所有
@FeignClient
,您不需要
配置=
部分。如果您删除
@Configuration
,那么这个bean将被忽略,
配置=
部分什么都不做。正确的方法是这样做的(如果您只想在一个特定的
@FeignClient
)是添加
@Configuration
,然后使用
excludeFilters
将其从
@ComponentScan
中排除,如果
配置
属性未与
@FeignClient
@Ravik一起使用,为什么会将其应用于所有组件,因为它是由组件扫描拾取的。对于那些对此感到困惑的人(就像我一样)读一读谢谢,这对我很有用。一条评论,小心,使用
feign.auth.BasicAuthRequestInterceptor
,而不是
org.springframework.http.client.support.basicauthIdenticationInterceptor
。。。