我正在试验 Grails 3 及其拦截器的新概念。给定以下拦截器/控制器:
class AuthInterceptor {
// ...other stuff in here
boolean before() {
if(FizzBuzz.isFoo()) {
redirect(controller: auth, action: signin)
true
} else {
true
}
}
}
class AuthController {
AuthService authService
def signin() {
String username = params[username]
String password = params[password]
user = authService.authenticate(username, password)
if(user) {
SimpleSecurityUtils.setCurrentUser(user)
redirect(url: ??? INTENDED_DESTINATION ???)
} else {
// Auth failed.
redirect(action: failed)
}
}
}
AuthService
是一个Grails 服务。我希望AuthService
每个实例都有一个AuthController
. 而且我希望AuthController
有一个prototype
范围,这样我就永远不会存储状态,并且为每个请求创建一个控制器。为了满足这些范围要求,我必须在两个 (AuthService
/ ) 中进行哪些更改?AuthController
- 假设
AuthController#signin
由于redirect(controller:auth, action: signin)
拦截器内部而执行,我如何从上面的控制器操作内部将用户重定向(再次)到他们的预期目的地(即,在拦截器拦截请求之前他们想去的 URL)?