0

私はすべて、

認証後、ユーザーを URL で指定されたアドレスにリダイレクトしたいと考えています。そのために、次のコードを実装します。

loginController で:

def auth = {        
   def savedRequest = session.getAttribute(WebAttributes.SAVED_REQUEST)  

...}

そしてconfig.groovyで:

grails.plugins.springsecurity.useSecurityEventListener = true

grails.plugins.springsecurity.onAuthenticationSuccessEvent = { e, appCtx ->

def savedRequest = session.getAttribute(WebAttributes.SAVED_REQUEST);
String requestUrl = savedRequest.getRedirectUrl()
}

grails.plugins.springsecurity.successHandler.defaultTargetUrl = requestUrl 

ログインを送信した後、次のエラーが発生しました。

タイプ例外レポート

メッセージ

サーバーで内部エラー () が発生したため、この要求を実行できませんでした。

例外

org.codehaus.groovy.runtime.InvokerInvocationException: groovy.lang.MissingMethodException: メソッドのシグネチャがありません: groovy.util.ConfigObject.getAttribute() は引数の型に適用されます: (groovy.util.ConfigObject) 値: [[:]] java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java:619)根本的な原因

groovy.lang.MissingMethodException: メソッドの署名がありません: groovy.util.ConfigObject.getAttribute() は引数の型に適用されます: (groovy.util.ConfigObject) 値: [[:]] script1379418399441191405188$_run_closure3.doCall(script1379418399441191405188.groovy: 154) java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) java.lang.Thread.run(Thread.java: 619) 注 根本原因の完全なスタック トレースは、Apache Tomcat/7.0.25 ログで入手できます。

4

1 に答える 1

2

Spring セキュリティは、オフにしない限り、これを自動的に行う必要があります。

これにより、ユーザーが URL を指定しなかった場合、またはログイン成功後に設定がオフになっている場合に、ユーザーはその URL に移動します。

grails.plugins.springsecurity.successHandler.defaultTargetUrl = ""

この設定を指定することも、false に設定することもできません。これは、ユーザーがログインするたびに、承認リクエストを取得する前にアクセスしようとしたページに関係なく、デフォルトのターゲット URL にリダイレクトされることを示しています。したがって、あなたが正しいと理解したら、これをfalseに設定するか、まったく指定しないでください。必要な機能が機能するはずです。

grails.plugins.springsecurity.successHandler.alwaysUseDefault=true
于 2013-09-17T12:17:28.577 に答える