0

私はgrails 1.3.7を使用しています。

次のフィルター設定があります。

class MyFilters {
    def userService
    def springSecurityService

    def filters = {
        all(controller: '*', action: '*') {
            before = {
                String userAgent = request.getHeader('User-Agent')

                int buildVersion = 0

                // Match "app-/{version}" where {version} is the build number
                def matcher = userAgent =~ "(?i)app(?:-\\w+)?\\/(\\d+)"

                if (matcher.getCount() > 0)
                {                   
                    buildVersion = Integer.parseInt(matcher[0][1])

                    log.info("User agent is from a mobile with build version = " + buildVersion)
                    log.info("User agent = " + userAgent)

                    String redirectUrl = "https://anotherdomain.com"

                    if (buildVersion > 12)
                    {
                        if (request.queryString != null)
                        {
                            log.info("Redirecting request to anotherdomain with query string")
                            redirect(url:"${redirectUrl}${request.forwardURI}?${request.queryString}",params:params)
                        }

                        return
                    }
                }
            }
            after = { model ->
                if (model) {
                    model['currentUser'] = userService.currentUser
                }
            }
            afterView = {

            }
        }
    }
}

思ったところでリダイレクトされないという問題が発生。すべての実行を停止し、この時点で指定した正確な URL にリダイレクトします。

「リダイレクト」行までデバッグすると、この行を過ぎて他の行を実行し、別のコントローラーにジャンプします。

4

1 に答える 1

0

false通常の処理フローが続行されないようにするには、beforeフィルターから戻る必要があります。

if (buildVersion > 12)
{
    if (request.queryString != null)
    {
        log.info("Redirecting request to anotherdomain with query string")
        redirect(url:"${redirectUrl}${request.forwardURI}?${request.queryString}",params:params)
        return false
    }
}

これは、ユーザー ガイドのセクション 6.6.2 の最後に記載されていますが、特に目立つものではありません。

アクション自体が実行されないように false を返す方法に注意してください。

于 2012-12-21T11:02:15.897 に答える