2

現在、grails と Spring セキュリティを使用して認証を実装しています。多くのカスタマイズを行わず、すぐに使えるものを使用すると、ユーザー名/パスワードを入力する auth.gsp に到達するユーザーに対してすべてが正常に機能します。ここで、通常のフローに沿った要件があります。外部サイトからサイトへのパンチアウトがあります。パンチアウトには、ユーザー名とパスワードがパラメーターとして提供されます。パンチ アウト シナリオでは、ユーザーにログイン画面が表示されないようにし、url パラメーターで指定されたユーザー名/パスワードを使用して認証を受ける必要があります。これは可能ですか?これを同じコードで達成するにはどうすればよいですか

4

1 に答える 1

4

はい、プログラムによるログインを行うことができます。例えば:

import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.core.context.SecurityContextHolder;
....  
AuthenticationManager authenticationManager;
....
def login(String username, String password) {
    UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(params.username, params.password);
    User details = new User(params.username);
    token.setDetails(details);

    try {
        //doing actual authentication    
        Authentication auth = authenticationManager.authenticate(token);
        log.debug("Login succeeded!");
        //setting principal in context
        SecurityContextHolder.getContext().setAuthentication(auth);
        return true 
    } catch (BadCredentialsException e) {
        log.debug("Login failed")
        return false
    }
} 

ここでいくつかの例を見ることができます: http://raibledesigns.com/rd/entry/java_web_application_security_part3

お役に立てれば。

于 2013-05-02T10:01:28.347 に答える