2012-03-29 12 views
2

URLを介して渡されるパラメータに応じてリダイレクトするgrailsサイト(grails 2.0 with springセキュリティ1.2.6)があります。失敗したログイン試行からurlパラメータを取得する方法

あなたは'/'に行った場合たとえば、あなたは標準'login/auth'に行くだろうが、あなたは'/?org=abccorp'に行った場合は、'landing/index'にリダイレクトされます。正常にログインすると、urlとsecurityの役割で渡されたparamsに基づいて、サイトのさまざまな部分に移動します。

これまでのところ、誰かが正常にログインする通常のシナリオでは、私はすべての作業を行うことができました。私の問題は、誰かがログインに失敗した場合に、春のセキュリティがデフォルトの'login/authfail'アクションにリダイレクトされ、元のurlまたはパラメータを見つける方法がないからです。

おそらくそこにはこれらのものを手に入れる方法がありますが、私が見つけたものは廃止されたり、移動されたり、単にそこには存在しません。

元々渡されたパラメータを取得する方法はありますか?私はそれを電話などの間でどこかで救うことができますか?

答えて

2

authenticationFailureHandler beanは、ログインに失敗したときにorg.springframework.security.web.RedirectStrategyインスタンスを使用してリダイレクトを行います。これは、デフォルトではorg.springframework.security.web.DefaultRedirectStrategyインスタンスで、redirectStrategy Beanとして登録されています。だからauthenticationFailureHandler beanのredirectStrategy beanをあなたのものと置き換えることができます。 Authenticationにアクセスできないので、redirectStrategy bean全体を置き換えることは現実的ではないようには見えないので、失敗か成功かのリダイレクトかどうかはわかりません。

authenticationFailureHandler bean全体を再定義しないようにするには、beanをBootStrap.groovyに変更するだけです。それはこのようなもの(それは少しオフになる場合もありますので、私はこれをテストしていません)

MyRedirectStrategyを使用しています(Groovyのかはsrc/javaのSRC /中) DefaultRedirectStrategyのカスタムサブクラスである
import com.foo.bar.MyRedirectStrategy 

class BootStrap { 

    def authenticationFailureHandler 

    def init = { servletContext -> 
     authenticationFailureHandler.redirectStrategy = new MyRedirectStrategy() 
    } 
} 

だろうリダイレクトURLを決定するURLをリクエストします。

+0

ありがとうございました!私は、ある種のクラスがなければならないことを知っていました。私が望むものを得るために、私は、ログインフォームurl( '/ j_spring_security_check?foo = blah')にパラメータを追加し、' DefaultRedirectStrategy'の私のサブクラスのurlにそれを渡す必要がありました。 – bressain

関連する問題