【问题标题】:Grails 3 interceptors and controller by exampleGrails 3 拦截器和控制器示例
【发布时间】:2015-07-06 15:58:54
【问题描述】:

我正在试验 Grails 3 及其 interceptors 的新概念。给定以下拦截器/控制器:

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)
        }
    }
}
  1. AuthServiceGrails Service。我希望每个AuthController 实例都有一个AuthService 实例。我希望AuthController 拥有prototype 范围,这样我就不会存储状态,并且会为每个请求创建一个控制器。为了满足这些范围要求,我必须对两者 (AuthService/AuthController) 进行哪些更改?
  2. 假设 AuthController#signin 是由于拦截器内的 redirect(controller:auth, action: signin) 而执行的,我如何将用户(再次)重定向到他们的预期目的地(即,他们想要在拦截器拦截之前访问的 URL请求)来自上面的控制器操作?

【问题讨论】:

  • 与你之前的帖子类似的问题,你有这个工作吗?您愿意分享一个工作示例吗?

标签: grails interceptor grails-controller grails-3.0


【解决方案1】:

首先,如果你重定向到另一个URL,你必须返回false来取消渲染过程,例如

 redirect(controller: auth, action: signin)
 false

其次,如果您想返回预览预期的 URL,则必须将其保存到会话中,然后在完成登录过程后重定向到保存的 URL。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-29
    • 1970-01-01
    • 2019-06-29
    • 2023-03-22
    • 2016-08-05
    • 2018-03-31
    • 1970-01-01
    相关资源
    最近更新 更多