我在grails 2.4.0中工作,为了安全起见,我使用了版本为shiro:1.2.1
的Shiro插件。对于Shiro集成,我遵循以下链接:
https://grails.org/plugin/shiro
Config.groovy
security {
shiro {
authc.required = false
filter.config = """
[urls]
/auth/login= noSessionCreation
/**.html = noSessionCreation , restTokenAuth
/user/addAllPermission** = noSessionCreation
/user/permission = noSessionCreation, restTokenAuth
/role/** = noSessionCreation, restTokenAuth
/property/** = noSessionCreation, restTokenAuth
/city/** = noSessionCreation, restTokenAuth
"""
}
}
我已经在 bootstrap.groovy 中创建了一个用户,例如:
if(User.findAllByUsername("fooUser@yopmail.com").isEmpty()){
def bl3User = new User(username: "fooUser@yopmail.com",
password: new Sha256Hash("123456").toHex())
bl3User.addToPermissions("property:*")
bl3User.save(flush: true, failOnError: true)
}
ShiroSecurityFilters.groovy
class ShiroSecurityFilters {
def filters = {
all(uri: "/**") {
before = {
println "${controllerName}"
if (!controllerName) return true
accessControl()
}
}
}
}
它显示控制器名称,但不明白为什么accessControl()
方法未在控制器上应用“角色和权限”,它总是返回真实值。 fooUser
仅具有属性权限,但用户也可以访问其他控制器。
例如,如果fooUser
可以成功地从邮递员city/list?userId=fooUser@yopmail.com
中访问API,那是错误的,因为它仅具有property
权限。
如何使用shiro插件在Grails 2.4.0中应用角色和权限?