シロを使用して聖杯でサービスを確保します
質問
Grailsを使用して、主にサービスフレームワークとして機能するアプリケーションを構築しています。私の質問は、サービスをコントローラーと同じ方法で保護できますか?
URIベースの例:
class SecurityFilters {
def filters = {
all(uri: "/**") {
before = {
// Ignore direct views (e.g. the default main index page).
if (!controllerName) return true
// Access control by convention.
accessControl()
}
}
}
}
解決
シロプラグインがこれをサポートしているかどうかはわかりませんが Acegiプラグイン 「実験的な」方法ではあるが(それが何であれ)、そうである。
アップデート
質問を適切に読んだので、サービスを保護するためにフィルターを使用できるかどうかを尋ねているようです。この場合、シロはシロではなく承認を実行しているのはフィルターであるため、シロはやや無関係です。
したがって、フィルターを使用してサービスを保護できるかどうかについての質問に答えるために、答えはノーです。これは、フィルター内からコントローラーにのみアクセスできるからです。ただし、グルーヴィーなメタプログラムを使用して、サービスでAOPスタイルのメソッドインターセプトを行うことができます。
基本的なアプローチは次のとおりです。
- 各サービスについて、追加します
invokeMethod
メタクラスへのプロパティ - このプロパティの価値は閉鎖でなければなりません。この閉鎖は、サービスで呼び出される各メソッドをインターセプトします(つまり、すなわち呼び出されます)。
- この閉鎖は必要です
- セキュリティチェックを実行します
- 許可が成功した場合は元の方法を呼び出し、承認が失敗した場合は例外をスロー(またはエラーを表示)します
さておき
可能であれば、上記の方法で自分のものを転がすのではなく、承認チェックを実行するために、実績のあるセキュリティプラグイン(Shiro、Acegiなど)を使用することを強くお勧めします。
所属していません StackOverflow