0

grails にはフィルターの周りのインターセプターがないようです。Spring の場合も同じです。grails 形式に従って実装したい場合は、何が最善の方法でしょうか。

4

1 に答える 1

1

あなたはそれをいくらか模倣することができます。クロージャーではbefore、リクエスト、セッションなどを確認し、通常の呼び出しを続行するかどうかを決定できます。必要に応じて、フィルターで応答をリダイレクトまたはレンダリングfalseし、コントローラーを呼び出してはならないことを示すために戻ることができます。

コントローラーの処理を許可したい場合は、afterクロージャーで作業を行うことができます。プロパティ アクセスを使用してリクエスト属性を保存および取得することを利用して、情報をクロージャのリクエスト スコープに格納しbefore(例: )、クロージャrequest.currentRequestNumber = counter.incrementAndGet()で取得できます(例: )。afterint currentRequestNumber = request.currentRequestNumber

ただし、コントローラーを「呼び出し」てその結果を検査し、その応答を送信するか、変更するか、別の応答を送信するかを選択することはできません。ただし、レンダリングされた応答をキャプチャするカスタム ライターがある応答ラッパーを使用して、おそらくそれを行うことができます。

javax.servlet.Filter通常のサーブレット フィルター、つまりweb.xmlを実装して登録するクラスを使用すると、柔軟性が向上します (ただし、Grails/Groovy のヘルプは少なくなります) 。

于 2013-04-22T17:19:06.023 に答える