【问题标题】:grails - spring security - get save attribute doesn't workgrails - spring security - 获取保存属性不起作用
【发布时间】:2013-09-21 20:36:06
【问题描述】:

我都是,

身份验证后,我想将用户重定向到 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) note 的完整堆栈跟踪 根本原因可在 Apache Tomcat/7.0.25 日志中找到。

【问题讨论】:

    标签: grails spring-security login-control


    【解决方案1】:

    Spring security 应该自动执行此操作,除非您将其关闭。

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

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

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

    grails.plugins.springsecurity.successHandler.alwaysUseDefault=true
    

    【讨论】:

    • 你是对的,所以它比我想的更简单。但我评论了这一行://grails.plugins.springsecurity.successHandler.defaultTargetUrl = ""。因为不支持双引号。
    • 我只是将引号用作占位符 - 我的配置中实际上并没有这种方式。
    猜你喜欢
    • 2017-04-18
    • 2012-01-12
    • 2017-08-20
    • 2014-09-04
    • 2015-08-02
    • 1970-01-01
    • 2014-02-27
    • 2013-05-03
    • 2011-08-20
    相关资源
    最近更新 更多