Grails过滤器禁用style / css

时间:2015-01-30 06:33:16

标签: css grails grails-plugin

我按照“Beginning Grails,Groovy and Griffon”一书制作了一个安全过滤器。

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

这是页面截图:

enter image description here

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 ->

        }
    }
}

}

1 个答案:

答案 0 :(得分:2)

您的网页未显示任何资源(样式或图片)的原因是,最近版本的Grails(2.3+)资产由/assets/**网址中的资产管道插件提供。

以前版本的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下的任何内容,现在应显示您的样式/图片。