用于身份验证的Grails 3拦截器?

时间:2015-04-27 17:16:05

标签: authentication interceptor grails-3.0

我正在尝试使用Grails 3 Interceptors。鉴于以下拦截器:

class AuthInterceptor {
    AuthInterceptor() {
        matchAll().includes(controller:"account")
    }

    // Intercept anything under /account.
    boolean before() {
        User user = SimpleSecurityUtils.getCurrentUser()
        if(user != SimpleSecurityUtils.anonymous) {
            // Only get here if the user is currently authenticated. Redirect them to where they want to go.
            true
        } else {
            redirect(controller: auth, action: signin)
            true    ??
        }
    }

    boolean after() { true }

    void afterView() {
        // no-op
    }
}
  1. matchAll().includes(...)实际上并不存在于Matcher对象上。那么我如何实际说" 只拦截对AccountController &#34的请求?
  2. 如果您遵循身份验证逻辑,如果用户当前是anonymous(未登录),我想将其重定向到AuthController#signin操作,这将为他们显示登录屏幕。拦截器无法显示redirect(...)关闭...因此如何执行此重定向安全?此外,我如何"保存"我们当前拦截的网址,以便在成功登录后,用户可以再次被重定向到最初请求的网址?
  3. 我上面说安全,因为如果有太多的重定向不断被抛出,我会抛出Grails CannotRedirectException的问题,而这些错误通常会在以后返回时缓解按this previous answer执行重定向。

1 个答案:

答案 0 :(得分:1)

对于#1,匹配(控制器:"帐号")应该可以解决问题。不知道#2的答案。