【问题标题】:Catalyst: Download Logfile securelyCatalyst:安全下载日志文件
【发布时间】:2012-11-11 16:13:09
【问题描述】:

我有以下问题:

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

我怎样才能将此文件提供为仅供管理员下载?根目录是没有选择的,因为每个人都可以下载它。我需要一个安全的方式。管理员在 Web 服务中有一个单独的区域来管理用户。

不幸的是,使用 ssh / sftp 也是没有选择的,日志必须通过 web 服务可用。

【问题讨论】:

  • 你如何确保管理员只能访问那个单独的区域?
  • 管理员有一个单独的登录掩码和创建的会话不同,这没问题,工作正常
  • 为什么不在日志文件发送操作中使用该会话来验证管理员身份? :)
  • 我如何创建这个日志文件发送动作????我尝试了一些方法,但没有成功。

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


【解决方案1】:

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

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

希望这能让你顺利上路。

【讨论】:

    【解决方案2】:

    对不起,这几天我真的很忙。
    感谢您的帮助,这就是我构建的解决方案并且它有效:-)

    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);
    }
    

    【讨论】:

      猜你喜欢
      • 2012-06-05
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 2020-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多