Grails 过滤器禁用 style/css

Grails filter disables style/css

我做了一个安全过滤器,跟着书"Beginning Grails, Groovy and Griffon"。

看起来功能正常,但由于某种原因,过滤器允许在没有登录用户的情况下打开的唯一页面缺少任何样式。只是文本字段、标签和按钮。简单的 capthca 插件也可以正常工作,并且可以正常加载验证码图像。

页面截图如下:

package collab.todo

class SecurityFilters {

def filters = {
    securityFilters(controller:'*', action:'*') {
        before = {
            if(!session.user && 
                (!controllerName.equals("user") && !actionName.equals("login") 
                    && !actionName.equals("captcha")
                     &&!actionName.equals("register")) ){
                redirect(controller: "user", action: "login")
            }
        }
        after = { Map model ->

        }
        afterView = { Exception e ->

        }
    }
}

}

您的页面未显示任何资产(样式或图像)的原因是因为在最新版本的 Grails (2.3+) 中,资产由 /assets/** URL.

Grails 的早期版本(您的书可能就是为此而写的)未使用此插件,因此这些资产不可过滤。

要解决此问题,您可以使用过滤器的排除属性(例如 uriExclude)。您可以在优秀的 Grails documentation.

中阅读更多相关信息

这是您的过滤器示例 uriExclude:

package collab.todo

class SecurityFilters {

def filters = {
    securityFilters(controller:'*', action:'*', uriExclude: '/assets/**') {
        before = {
            if(!session.user && 
                (!controllerName.equals("user") && !actionName.equals("login") 
                    && !actionName.equals("captcha")
                     &&!actionName.equals("register")) ){
                redirect(controller: "user", action: "login")
            }
        }
        after = { Map model ->

        }
        afterView = { Exception e ->

        }
    }
}
}

此更改将排除将您的过滤器应用于 /assets/ URI 下的任何内容,并且您的 styles/images 现在应该会出现。