有没有一种方法可以防止使用过滤器在请求中达到要求

时间:2019-06-24 15:17:18

标签: java spring spring-boot grails groovy

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

我尝试将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)
                        }
                    }
                }
            }
        }
    }

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

1 个答案:

答案 0 :(得分:3)

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