Catalyst:安全下载Logfile

时间:2012-11-23 09:58:11

标签: web-services perl web-applications logging catalyst

我有以下问题:

我的Catalyst Webservice使用Log4Perl生成记录所有用户活动的日志文件。

如何仅为管理员提供此文件作为下载?根目录不是选项,因为每个人都可以下载它。我需要一种安全的方式。管理员在Web服务中有一个单独的区域来管理用户。

遗憾的是,使用ssh / sftp也没有选项,必须通过Web服务提供日志。

2 个答案:

答案 0 :(得分:1)

要构建@memowe建议的日志文件发送操作,您需要一个执行以下操作的控制器:

  1. 验证登录用户是否为管理员,如果没有则重定向。
  2. 创建标量$filehandle以读取日志文件。
  3. 使用$c->res->content_type(something)$c->res->header('Content-Disposition' => 'attachment')强制将响应视为下载,以便浏览器显示“另存为...”对话框。
  4. 设置$c->res->body($filehandle)以返回日志文件的内容并绕过View渲染器(模板或其他)。
  5. 希望这能让你顺利上路。

答案 1 :(得分:0)

抱歉,过去几天我真的很忙 感谢您的帮助,这就是我构建的解决方案,它的工作原理如下: - )

sub log : Chained('base_admin') PathPart('log') Args(0) {
    my ( $self, $c ) = @_;
    my $logfile = $c->path_to('test.log');

    $c->response->header('Content-Type' => 'text/plain');
    $c->response->header('Content-Disposition' => 'attachment; filename=test.log');
    $c->serve_static_file($logfile);
}