0

我都,

身份验证后,我想将用户重定向到 url 中指定的地址。为此,我实现了这段代码:

在登录控制器中:

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 security 应该自动执行此操作,除非您将其关闭。

如果用户没有指定一个 url 或者在成功登录后设置关闭,这会将用户带到一个 url

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

您可以简单地不指定此设置或设置为 false。这表明每次用户登录时,无论他们在获得授权请求之前尝试访问哪个页面,他们都会被重定向到默认目标 URL。所以,如果我理解你是正确的,请将其设置为 false 或根本不指定它,你想要的功能应该可以工作。

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