我按照“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 ->
}
}
}
}
答案 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下的任何内容,现在应显示您的样式/图片。