1

Grails と Vaadin 7 に基づいてアプリを開発しています。SpringSecurity で認証と承認を機能させることができましたが、Spring Security 認証マネージャーを呼び出して Vaadin で機能させる独自のサービスを開発する必要がありました。

class SecurityService {

    static transactional = true

    def springSecurityService
    def authenticationManager

    void signIn(String username, String password) {
        try {
            def authentication = new UsernamePasswordAuthenticationToken(username, password)
            SCH.context.authentication = authenticationManager.authenticate(authentication)
        } catch (BadCredentialsException e) {
            throw new SecurityException("Invalid username/password")
        }
    }
}

問題は、認証を実装する必要がありremember me、どこから始めればよいかわからないことです。

authenticationManager使用したいことをどのように知らせるのremeberMeAuthenticationですか?ログインビューのチェックボックスからブール値を取得できますが、次にそれをどうすればよいですか?

4

2 に答える 2

2

あなたの質問は、ログインページからのチェックボックスの値 (remember me フラグ) の処理に固有のものであるため、RememberMeServicesloginSuccessを呼び出すか、loginFailメソッドを呼び出す必要があるというのが答えです。は、応答に自動ログイン Cookie を追加し、その Cookie を削除します。loginSuccessloginFail

RememberMeServicesただし、アプリで構成したことが確実でない限り、上記の回答はあまり役に立たないと思います。次の構成手順RememberMeServicesは、すべてを自分のやり方で行うのに役立つ場合があります (または、すぐに使用できる機能を理解するのに役立ちます)。

(1) LogoutHandler を実装するクラス (myRememberMeServices と呼びます) を作成RememberMeServicesます。

(2)autoLoginメソッドで、Cookie 値を解析した後、認証オブジェクト (UsernamePasswordAuthenticationToken) を作成します。

(3)loginFailメソッドで、Cookie をキャンセルします。

(4)loginSuccessメソッドで、自動ログイン Cookie を作成します。autoLogin メソッドで使用する値を追加します。通常、Cookie の値は暗号化されています。

(5)logoutメソッド で、Cookie をキャンセルします。

(6) myRememberMeServices を次の 4 か所に注入し、適切なメソッドを呼び出します。

(a) At the time of successful login (if checkbox value is set),     
(b) At the time of failed login,   
(c) On logout, and   
(d) In filter that does autologin 

RememberMeAuthenticationFilterがそのコンストラクターでauthenticationManagerandを取ることに注意してください。RememberMeServices

あなたの他の質問への答えは、authenticationManager私を覚えていることについて何も知る必要がないということです。authenticationManagerとについて知る必要があるのは、フィルター (または自動ログインを処理する任意のクラス) ですRememberMeServices。(つまり、RememberMeServicesトークンを要求し、それを渡してauthenticationManager自動ログインを行います)。

于 2013-04-15T15:50:29.277 に答える
2

Spring Security のアーキテクチャは、サーブレット フィルターに基づいています。上記で実装したサインイン メカニズムは、通常、 によって行われますUsernamePasswordAuthenticationFilter。呼び出された別のフィルターRememberMeAuthenticationFilterは、記憶機能の責任を負います。はauthenticationManager、remember-me 機能がアプリケーションによって使用されているかどうかをまったく認識していません。

Spring Security を別の Web フレームワークと統合する場合は、まず、2 つのフレームワークのフィルターがどのように連携できるかを調べてください。

于 2013-04-15T08:19:13.520 に答える