如何使用Spring的资源抽象使用基本身份验证

时间:2018-05-28 14:26:42

标签: java spring

我在服务器上有一个文件,可以通过Https使用Spring的 Resource 抽象来访问。我希望Spring解析资源并将其注入我的Bean的构造函数中,如下所示:

public class MyClass {

    public MyClass(
            @Value("https://myserver.com/myfile") Resource resource) {
        // do something using the resource
    }
}

问题在于我无法弄清楚如何将基本身份验证的用户名和密码包含在此模式中。我尝试了“普通”风格

@Value("https://username:password@myserver.com/myfile")

但看起来似乎没有正确理解。服务器正在响应HTTP状态401 - 未经授权。我复制了字符串并使用 wget 执行相同的查询,并且它有效。因此,我的凭据没有问题,但很可能使用用于定义资源的语法。

Spring中是否有一个有效的语法,或者我是否必须以另一种方式手动设置Authentication头?

1 个答案:

答案 0 :(得分:0)

这感觉错误,如果你没有这样做,我更喜欢它......但是你可以依靠@Value注入财产值。请注意此处使用@Autowired

@Component
public class MyClass {
    private String resourceUrl;

    @Autowired
    public MyClass(@Value(${external.resource.url}) String resourceUrl) {
        this.resourceUrl = resourceUrl;
    }
    // The rest of your code
}

然后,您可以将属性external.resource.url放入您喜欢的任何值...包括您的用户名和密码的完整网址。

我想提醒一下,这可能是理想的事情,因为您希望能够将URL,用户名和密码作为单独的内容注入到您的应用程序中。这让您了解如何使用一个组件完成它,而我强烈建议您将其拆分(而不管您做什么,请 检查属性文件将这些值存入你的源代码控制中),我将机械部分分成更多的值作为读者的练习。