def filters = {
loginCheck(controller:'*', action:'*') {
before = {
if(!session.user && !session.merchants)
{
redirect(action:'login')
return false
}
}}
这是我的登录安全过滤器。以下是用于限制用户进行搜索操作的拦截器。但两者都不起作用。任何人都可以说出错误是什么吗?
def beforeInterceptor = [action:this.&checkUser,Only:'search']
def scaffold = true
def checkUser()
{
if (session.user)
{
redirect(action:"search")
}
if(session.merchants)
{
redirect(action:"toIndex")
flash.message="You are not valid user for this action"
return false
}
}
答案 0 :(得分:0)
实际上,您应该为每个控制器和每个操作设置过滤器。 这是参考文献中的grails示例:
class SecurityFilters {
def filters = {
loginCheck(controller:'*', action:'*') {
before = {
if(!session.user && !actionName.equals('login')) {
redirect(action:'login')
return false
}
}
}
}
}
我使用了这个,它对我有用。
我不确定您的代码中的session.merchants
。
这是什么 ?
你有没有这样做:
要创建过滤器,请创建一个类 结束于约定的过滤器 grails-app / conf目录。
编辑: 如果使用spring security,则无需添加过滤器或拦截器。 查看用户指南:http://burtbeckwith.github.com/grails-spring-security-core/docs/manual/index.html
您可以使用网址映射或注释对其进行配置。
离。
grails.plugins.springsecurity.controllerAnnotations.staticRules = [
'/js/admin/**': ['ROLE_ADMIN'],
'/someplugin/**': ['ROLE_ADMIN']
]
编辑2:
要让登录用户使用:
def authenticateService
...
def action{
def user = authenticateService.principal()
def username = user?.getUsername()
...
答案 1 :(得分:0)
有一个非常好的速记,你可以直接应用于动作(如果你没有使用过滤器):
@Secured(['ROLE_USER'])
def search = {
}
您可以为每个用户提供ROLE_USER,只需要该角色。