使用基于ldap角色的授权进行身份验证后,无法访问应用程序

时间:2019-03-07 11:17:17

标签: grails

我们的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 ->
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在grails 3中,您可以设置Interceptor来检查每个请求并采取适当的措施。您需要在before块中添加支票。

编辑:正如Jeff Brown在评论中指出的那样,grails 2使用Filters而不是拦截器。

编辑:注销逻辑中的内容如下:

...
        else {                
           if (springSecurityService.isLoggedIn()) {
               session.invalidate()
               redirect action:'youShallNotPass'
               return false
           }
        }