2

これがシナリオです。私は 2 つのオブジェクトUsers(ユーザー名/パスワードUserInfo付き) と、ユーザーに関連する残りのデータを持っています。はUsers数千のレコードを持つ古いテーブルで、UserInfoかなり新しいものです。UserInfoユーザーが最初にログインしたときに、できるだけ多くの情報を取得したいと考えています。

最初のログイン後にユーザーをカスタム画面に強制し、データを要求したいと思いUserInfoます。新しい画面で「必要な」データを取得したら、ユーザーが自発的に「プロファイル」の下にデータを入力するまで表示しません。

アプリケーションには複数のエントリ ポイントがあるため、これを確認するためにすべてのコントローラを更新したくありません。

Spring Security filterログインに成功したときに実行されるまたは何かを使用できる方法はありますか? 私は見ましApplicationListener<AuthenticationSuccessEvent>たが、ブラウザーにリンクをコピーして貼り付けるかのように問題を解決しません。「追加情報」を要求せずに目的地に進むことができます。

一言で言えば、ログインが失敗した場合、ユーザーはアプリケーションに入ることができないというチェックが必要です。彼がどんなに侵入しようとしても。

4

2 に答える 2

1

で、Config.groovySpring Security を構成defaultTargetUrlし、常にそこにリダイレクトするように指示します。

grails.plugins.springsecurity.successHandler.alwaysUseDefault = true
grails.plugins.springsecurity.successHandler.defaultTargetUrl = '/userInfo/edit'

UserInfoControllerの編集アクションで、必要なフィールドが存在することを確認できます (おそらくuserInfo.validate()?)。存在する場合は、好きな場所 (おそらく「/」) にリダイレクトします。そうでない場合は、編集情報ビューをレンダリングします。

于 2012-12-12T21:40:51.823 に答える
0

@doelleri が提案したものを採用し、次の手順でルールを強化できます。

  1. バッチ タスクを実行して、補足情報をまだ提供していない各ユーザーに一時的な ROLE_DISABLED ロールを割り当てます。ユーザーがすでにいくつかの役割を持っている場合は、それらをいくつかのプロパティに保存します。

  2. ROLE_DISABLED ロールを持つユーザーのみが /userInfo/edit へのアクセスを許可されるように、承認ルールを設定します。

  3. /userInfo/edit で、ユーザーが ROLE_DISABLED ロールを持っている場合は、情報入力ビューをレンダリングし、情報が正常に更新された後にユーザーのロールを再開します。それ以外の場合は、「/」または要求されたパスにリダイレクトします。

于 2012-12-24T04:16:21.563 に答える