首页 > 解决方案 > 如何在 Grails 中正确定义重定向?

问题描述

在我的 grails 应用程序中,我使用拦截器来检查用户是否登录。如果没有,用户应该被重定向到登录页面(/account/index)。由于某种原因,这不起作用。(附加信息:我没有为我的控制器定义命名空间。)

我的应用程序中的相关代码片段:

class UrlMappings {

static mappings = {
    "/$controller/$action?/$id?(.$format)?"{
        constraints {
            // apply constraints here
        }
    }

    "/"(controller: "account", action:"index")
    "500"(view:'/error')
    "404"(view:'/notFound')
  }
}

在 application.yml 我设置了:

grails:
    profile: web
    cors:
        enabled: true
    codegen:
        defaultPackage: myapp
    gorm:
        reactor:
            # Whether to translate GORM events into Reactor events
            # Disabled by default for performance reasons
            events: false
spring:
    jmx:
        unique-names: true
    main:
        banner-mode: "off"
    groovy:
        template:
            check-template-location: false
    devtools:
        restart:
            additional-exclude:
                - '*.gsp'
                - '**/*.gsp'
                - '*.gson'
                - '**/*.gson'
                - 'logback.groovy'
                - '*.properties'
                - 'grails-app/views/**'
                - 'grails-app/i18n/**'
                - 'grails-app/conf/**'
management:
    endpoints:
        enabled-by-default: false

但是将 cors 设置为启用或删除这些行没有任何区别。

拦截器中的重定向(每个控制器都有一个拦截器,我认为这是要走的路),如下所示:

class ZoneInterceptor {

    boolean before() {
        Boolean allowed = session?.user != null
        if (!allowed) {
            redirect(controller: "account", action: "index")
            return false
        }
        return allowed
    }

    boolean after() { true }

    void afterView() {
        // no-op
    }
}

这段代码给了我一个时髦的消息:浏览器显示一个弹出窗口“打开 xdg-open?一个网站想要打开这个应用程序”(使用最新的 chromium 和勇敢的浏览器,两者的反应方式相同,firefox 什么都不做.这就是为什么我认为问题肯定在我这边)。

我该如何解决?我只想有一个正确的重定向,而不是任何 xdg-open 弹出窗口。

提前感谢您的所有帮助!

标签: redirectgrailscross-domaingrails-4

解决方案


推荐阅读