3

アプリが受け取った許可されていないリクエストをログに記録できるようにしたいと考えています。Shiro プラグインは HTTP リダイレクトを使用してユーザーをauth/unauthorizedリクエスト オブジェクトに送信するため、新しいオブジェクトであり、元の URL を取得できません。コントローラー/アクション名; またはそこからパラメーターを要求します。

元の URL、または AuthController の許可されていないアクション内のコントローラーとアクションの名前 (および可能であれば要求パラメーター) を特定する方法はありますか?

プラグインソースの参考としてhttp://plugins.grails.org/grails-shiro/tags/RELEASE_1_1_3/ShiroGrailsPlugin.groovyを見ています。

詳細:
Grails 1.3.7
Shiro Grails プラグイン 1.1.3

4

1 に答える 1

2

私は同じ問題を抱えていました...私の解決策は完璧ではありません:

ブラウザは、ヘッダーの1つでいわゆるリファラーを送信します。

request?.getHeader('Referer')

しかし、リファラーはあなたが本当に信頼できるものではありません-しかし、ほとんどのブラウザーはそれを送信します。

accessControl()別の解決策はフィルターである可能性があります。を呼び出す前に、現在のURLを別の変数に書き込んでみてくださいShiroSecurityFilters.groovy。現在のURLは。から取得できますrequest.forwardURI

更新:私の最後の仮定を検証しました-これは私にとって最もクリーンな解決策のようです:

ShiroSecurityFilters.groovy、を置き換えます

            // Access control by convention.
            accessControl()

            // Access control by convention.
            if (!accessControl()) {
                session.deniedUrl = request.forwardURI
                return false
            }

session.deniedUrlこれにより、auth/unauthorizedコントローラーの場合と同じようにURLにアクセスできます。

于 2012-04-19T21:14:10.667 に答える