我按照“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 ->
}
}
}
最佳答案
您的页面未显示任何 Assets (样式或图像)的原因是因为在最新版本的 Grails (2.3+) 中, Assets 由 /assets/**< 中的 Assets 管道插件提供
网址。
以前版本的 Grails(您的书可能就是为此而写的)没有使用此插件,因此这些 Assets 不可过滤。
要解决此问题,您可以使用过滤器的排除属性(例如 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 下的任何内容,并且您的样式/图像现在应该会出现。
关于css - Grails 过滤器禁用样式/CSS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28230432/