【问题标题】:Is there a way to prevent request from reaching the action in grails using filters有没有办法使用过滤器阻止请求到达 grails 中的操作
【发布时间】:2019-06-24 15:17:18
【问题描述】:

当令牌无效时,我试图阻止请求到达 grails 操作 ("/$controller/$action?/$id"),以便它在不调用操作的情况下将 JSON 响应返回给客户端

我尝试将 return 语句添加到代码中,但请求仍会调用操作。 我正在使用 java 7 和旧版本的 grails (grails 2.4.3)

        class ShiroSecurityFilters {
        def filters = {
            vueJsFilter(uri: '/api/**'){
                def userObject = null
                def response_data = null
                before = {
                    def authorization_header = request.getHeader("Authorization")
                    if (authorization_header){
                        def authorization = authorization_header.split(' ')[1]
                        userObject = Collaborateur.findByAccessToken(authorization)
                        if (userObject){
                            println "Welcome Back, $userObject"
                        }else{
                            response_data = [
                                title: "filter token error"
                            ]
                            response.status = 401
                            render(response_data as JSON)
                        }
                    }
                }
            }
        }
    }

我希望过滤器阻止请求执行或调用它,而是将响应发送回客户端,而不是在这种情况下将请求发送到下一个资源,我在网上做了一些研究,但我没有找不到任何东西,任何帮助将不胜感激

【问题讨论】:

    标签: java spring spring-boot grails groovy


    【解决方案1】:

    您必须从before 过滤器中return false 以防止调用该操作。在您上面的源代码中,过滤器不返回任何内容。

    【讨论】:

    • 谢谢 @Dónal 成功了,我试过 return false 但我没有把它放在我的代码中
    猜你喜欢
    • 1970-01-01
    • 2022-01-11
    • 2020-12-18
    • 2019-10-29
    • 1970-01-01
    • 2019-12-21
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多