Java 如何防止直接访问Android应用程序中使用的文件的URL?

Java 如何防止直接访问Android应用程序中使用的文件的URL?,java,android,apache,Java,Android,Apache,我在服务器中有一个mp3文件,例如:www.Example.com/Album/Songs/abc.mp3 我正在构建一个android应用程序,列出“歌曲”文件夹下的所有文件,然后播放选定的文件 现在,有没有办法防止直接访问mp3文件,以防有人获得URL 我尝试了通常的方法,比如重写引擎。它阻止直接访问URL,但也阻止我的应用程序使用这些文件 以下是我播放这些文件的android代码: MediaPlayer player = new MediaPlayer();

我在服务器中有一个mp3文件,例如:www.Example.com/Album/Songs/abc.mp3

我正在构建一个android应用程序,列出“歌曲”文件夹下的所有文件,然后播放选定的文件

现在,有没有办法防止直接访问mp3文件,以防有人获得URL

我尝试了通常的方法,比如重写引擎。它阻止直接访问URL,但也阻止我的应用程序使用这些文件

以下是我播放这些文件的android代码:

            MediaPlayer player = new MediaPlayer();
            player.setAudioStreamType(AudioManager.STREAM_MUSIC);
            player.setDataSource(song_path);
            player.prepare();
            player.start();
宋朝的道路很简单


PS:我知道通过ProGuard加密几乎不可能通过反向工程获得直接URL。我仍然想看看是否还有其他方法可以让它工作。

在android应用程序中,你对此无能为力。这是服务器端应该采取的策略,以防止出现这种情况。即使你对你的APK进行了升级,也会有像wireShark这样的应用程序可以嗅探你的应用程序并找到你正在调用的API

有一些方法可以做到这一点。有些人尝试在应用程序(用户已登录)调用say-play API时生成临时链接,他们为应用程序提供临时链接,该链接将使某些小步舞曲(或小时)失效。然后应用程序使用该链接播放音乐或其他内容


另一种情况是加密音乐字节并在应用程序端解密,这需要考虑更复杂的因素。

在android应用程序中,您对此无能为力。这是服务器端应该采取的策略,以防止出现这种情况。即使你对你的APK进行了升级,也会有像wireShark这样的应用程序可以嗅探你的应用程序并找到你正在调用的API

有一些方法可以做到这一点。有些人尝试在应用程序(用户已登录)调用say-play API时生成临时链接,他们为应用程序提供临时链接,该链接将使某些小步舞曲(或小时)失效。然后应用程序使用该链接播放音乐或其他内容


另一种方案是加密音乐字节并在应用程序端解密,这需要考虑更复杂的因素。

您可以使用
player.setDataSource(上下文上下文、Uri、映射头)
发送自定义
头。然后,在返回mp3之前,可以在PHP或Apache中检查该自定义头

要签入Apache,可以使用
重写规则
来检查并仅允许具有正确
头的连接

在PHP中,您可以使用
$\u服务器['HTTP\uu*您的\u HEADER\u HERE*']
然后
回送
MP3文件以及正确的头文件。如果允许搜索,可能会有点棘手


Apache
重写规则可能是最容易实现的。

您可以使用
player.setDataSource(上下文上下文、Uri、映射头)
发送自定义
头。然后,在返回mp3之前,可以在PHP或Apache中检查该自定义头

要签入Apache,可以使用
重写规则
来检查并仅允许具有正确
头的连接

在PHP中,您可以使用
$\u服务器['HTTP\uu*您的\u HEADER\u HERE*']
然后
回送
MP3文件以及正确的头文件。如果允许搜索,可能会有点棘手


Apache
重写规则可能是最容易实现的。

歌曲路径简直难以置信。它将是`hlttp://www.xyz.com/Album/Songs/abc.mp3`我想。@greenapps:现在更新了。服务器运行PHP吗?对于阻止直接连接,您有多认真?也就是说,您是否愿意编写一些PHP?你能从应用程序中更改URL请求吗?@Tigger:是的,服务器运行PHP。我只是好奇地想知道是否存在任何简单的方法,因为我不太精通PHP。我无法更改应用程序中的URL请求,因为我在这方面已经做得太过分了。
song_路径就是www.xyz.com/Album/Songs/abc.mp3
难以置信。它将是`hlttp://www.xyz.com/Album/Songs/abc.mp3`我想。@greenapps:现在更新了。服务器运行PHP吗?对于阻止直接连接,您有多认真?也就是说,您是否愿意编写一些PHP?你能从应用程序中更改URL请求吗?@Tigger:是的,服务器运行PHP。我只是好奇地想知道是否存在任何简单的方法,因为我不太精通PHP。我无法从应用程序更改URL请求,因为我已经在这个方向上走得太远了。在服务器端,是否有任何可能防止这种情况发生?我尝试了这个问题中列出的选项:所有这些选项都会阻止我的android应用程序的文件。这个链接所指的是防止从服务器端外部访问文件。任何形式的访问。像db文件,你不能以任何方式直接访问。有些不同。你要寻找的是流媒体方法。我遵循了相同的步骤(重写引擎),对于一个网站来说效果非常好。当用户单击“播放”按钮时,我的网页能够播放mp3。如果用户试图通过URL直接访问该文件,他们会被重定向到主页(从而阻止访问该文件)。我正在为一个android应用程序寻找类似的东西。我正在开发一个音乐流应用程序,我已经走了你想走的路。我们在服务器端使用临时链接生成,这很好。我知道即使是soptify也会对数据进行加密。这是实现您想要的东西的两种标准方法。在服务器端,是否有任何方法可以防止这种情况发生?我尝试了这个问题中列出的选项:所有这些选项都会阻止我的android应用程序的文件。这个链接所指的是防止从服务器端外部访问文件。任何形式的访问。像db文件,你不能以任何方式直接访问。有些不同。你要寻找的是流媒体方法学