1

Sinatra を使用してセキュアな Web サービスを作成しています。SSL と、すべての要求で送信されるセキュリティ トークンが必要です。そのため、着信リクエストごとにセキュリティ トークンをチェックし、トークンが見つからないか無効である場合はリクエストを拒否する単純なミドルウェアを作成しました。

module MyWebService
  class App < Sinatra::Base
    use MyWebService::Security

    # ...
  end
end

ただし、Web サービスにセキュリティを追加する前に作成された検証テストの大規模なテスト スイートが失敗したことは明らかです。

ミドルウェアを有効にした後、単純に無効にする方法はありますか? そうすれば、テスト スイート全体が引き続き機能し、セキュリティ ミドルウェアを個別にテストできます。

4

1 に答える 1

3

美しいものではありませんが、実用的な回避策を見つけました。

アプリケーションでミドルウェアを有効にする代わりに、config.ru. そう:

module MyWebService
  class App < Sinatra::Base
    use MyWebService::Security   # Remove this line
  end
end

そしてでconfig.ru

require "my_web_service"

app = MyWebService::App
app.use MyWebService::Security

run app

これですべての検証テストに合格し、サーバーを起動するとセキュリティ ミドルウェアが有効になります。

セキュリティ ミドルウェアをテストするために、アプリをサブクラス化し、サブクラスでセキュリティ ミドルウェアを有効にします。

class SecurityMiddlewareValidation < Minitest::Test
  include Rack::Test::Methods

  def app
    Class.new(MyWebService::App) { use MyWebService::Security }
  end

  # ...
end

このようにして、テスト間でミドルウェアを無効/有効にする必要はありません。

于 2014-11-14T13:40:51.907 に答える