Java 如何在web上访问受密码保护的mp4视频

Java 如何在web上访问受密码保护的mp4视频,java,authentication,vaadin,http-authentication,Java,Authentication,Vaadin,Http Authentication,我正在使用vaadin视频将一些视频集成到我的应用程序中。 这些视频都在网络上,有密码保护。我正在使用以下方法,但它对我不起作用。它一直问我用户名和密码 URL url = new URL(Constants.VIDEO_HTTP_ADDRESS + fileName + ".mp4"); URLConnection uc = url.openConnection(); String userpass = Constants.VIDEO_HTTP_

我正在使用vaadin视频将一些视频集成到我的应用程序中。 这些视频都在网络上,有密码保护。我正在使用以下方法,但它对我不起作用。它一直问我用户名和密码

        URL url = new URL(Constants.VIDEO_HTTP_ADDRESS + fileName + ".mp4");
        URLConnection uc = url.openConnection();
        String userpass = Constants.VIDEO_HTTP_ADDRESS_USERNAME + ":" + Constants.VIDEO_HTTP_ADDRESS_PASSWORD;
        String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
        uc.setRequestProperty("Authorization", basicAuth);

....
....
        final Video v = new Video(label);
        ExternalResource fileResource;

        fileResource = new ExternalResource(url);
        v.setSources(fileResource);

我有用户名和密码,我想将这些视频集成到我的应用程序中,这样他们就不需要明确的用户名和密码

正如@f1sh在评论中指出的,您需要使用
URLConnection
获取视频资源。您可以使用
StreamResource
而不是
ExternalResource
,它允许从提供的
InputStream
加载资源

类似的方法应该会奏效:

Video v = new Video();
v.setSource(new StreamResource(new StreamSource() {

    @Override
    public InputStream getStream() {
        try {
            URL url = new URL(Constants.VIDEO_HTTP_ADDRESS + fileName + ".mp4");
            URLConnection uc = url.openConnection();
            String userpass = Constants.VIDEO_HTTP_ADDRESS_USERNAME + ":" + Constants.VIDEO_HTTP_ADDRESS_PASSWORD;
            String basicAuth = "Basic " + new String(new Base64().encode(userpass.getBytes()));
            uc.setRequestProperty("Authorization", basicAuth);
            return uc.getInputStream();
        } catch (IOException e) {
            //add some exception handling here
        }
    }

}, fileName + ".mp4"));

setRequestProperty
是否实际生成http头?如何检查?根据文档,应该检查。但是:您没有在
外部资源中使用
URLConnection
。您可以使用
URL
实例。这意味着你的头操作没有效果。你可以使用拦截代理(ZAP或OWASP)并查看流量。或者wireshark,这样你就不需要代理了。您是否尝试过修改URL本身,使其看起来像“”?上面的代码告诉我“不支持此类型的视频文件”的错误,您何时收到此错误?我刚刚用一些公共mp4视频检查了我的代码,它可以正常工作,因此可能是您的
URLConnection
有问题。你确定它是正确的吗?您能否将
uc.getInputStream()
中的视频保存到某个文件(不使用vaadin)并检查它是否有效?它确实有效,但速度正在减慢。我有10个视频,我认为这部分代码试图一次流式传输所有视频,这会减慢整个过程。