我们的grails应用程序使用ldap身份验证没有任何问题,现在,如果用户没有特定的ldap角色,我需要阻止对整个应用程序的访问。
我可以在Config.groovy批注中看到该角色并将其使用,或保护控制器中的动作,但是我需要一个方案/方式来仅显示“ Denied ...”消息并注销。 (禁止发布403)。
def filters = {
loginFilter(controller:'login', action:'ajaxSuccessSproutcore') {
before = {
switch(Environment.current.name) {
case { it == 'development' || it == 'hrm'}:
if (springSecurityService.isLoggedIn() && grails.plugin.springsecurity.SpringSecurityUtils.ifAnyGranted("ROLE_ADMIN, ROLE_SEA_HRM_LOGIN")){
} else {
if (springSecurityService.isLoggedIn()) {
render ([msg:''] as JSON)
session.invalidate()
return false
}
}
break
default:
if (springSecurityService.isLoggedIn() && grails.plugin.springsecurity.SpringSecurityUtils.ifAnyGranted("ROLE_ADMIN , ROLE_USER")){
} else {
if (springSecurityService.isLoggedIn()) {
render ([msg:''] as JSON)
session.invalidate()
return false
}
}
break
}
}
after = { Map model ->
}
afterView = { Exception e ->
}
}
}
答案 0 :(得分:0)
在grails 3中,您可以设置Interceptor来检查每个请求并采取适当的措施。您需要在before
块中添加支票。
编辑:正如Jeff Brown在评论中指出的那样,grails 2使用Filters而不是拦截器。
编辑:注销逻辑中的内容如下:
...
else {
if (springSecurityService.isLoggedIn()) {
session.invalidate()
redirect action:'youShallNotPass'
return false
}
}