如何通过假装客户端使用基本身份验证保护的Restful Web服务

时间:2016-09-21 02:49:46

标签: 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;
    }
}

为了保护这个网址,我像这样配置spring-security:

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创建了一个“service-comsumer”。这是一个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);
}

但我不知道如何配置请求标题“授权”。

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

2 个答案:

答案 0 :(得分:16)

您需要创建一个FeignClient配置类,例如

import feign.auth.BasicAuthRequestInterceptor;

@Configuration
public class FeignClientConfiguration {
    @Bean
    public BasicAuthRequestInterceptor basicAuthRequestInterceptor() {
         return new BasicAuthRequestInterceptor("admin", "admin");
    }
}

然后在@FeignClient注释中使用此配置文件

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

继续尝试,希望有所帮助

感谢Ryan Baxter进行了更正

答案 1 :(得分:0)

截至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注释配置,以免将其应用于所有请求。