我正在尝试使用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
}
}
matchAll().includes(...)
实际上并不存在于Matcher
对象上。那么我如何实际说" 只拦截对AccountController
&#34的请求?anonymous
(未登录),我想将其重定向到AuthController#signin
操作,这将为他们显示登录屏幕。拦截器无法显示redirect(...)
关闭...因此如何执行此重定向安全?此外,我如何"保存"我们当前拦截的网址,以便在成功登录后,用户可以再次被重定向到最初请求的网址?我上面说安全,因为如果有太多的重定向不断被抛出,我会抛出Grails CannotRedirectException
的问题,而这些错误通常会在以后返回时缓解按this previous answer执行重定向。
答案 0 :(得分:1)
对于#1,匹配(控制器:"帐号")应该可以解决问题。不知道#2的答案。