grails - 如何使用 JOSSO 和 Spring Security 从 Grails 应用程序中的 LDAP 获取自定义属性?

标签 grails spring-security ldap josso

我已成功将 JOSSO 和 Spring Security 应用程序集成到我的 Grails 应用程序中(使用 LDAP 进行用户控制)。

由于 JOSSO 已经管理身份验证,因此我正在使用“预身份验证场景”进行 Spring Security 集成。这是我与 Spring Security 配置相关的 resources.groovy 内容:

def developmentEnvironment = {
  if (grailsApplication.config.grails.plugins.springsecurity.active) {

    preAuthenticatedAuthenticationProvider(PreAuthenticatedAuthenticationProvider) {
      preAuthenticatedUserDetailsService = ref('preAuthenticatedUserDetailsService')
    }

    preAuthenticatedUserDetailsService(PreAuthenticatedGrantedAuthoritiesUserDetailsService) {
    }

    j2eePreAuthFilter(J2eePreAuthenticatedProcessingFilter) {
      authenticationManager = ref('authenticationManager')
      authenticationDetailsSource = {
        J2eeBasedPreAuthenticatedWebAuthenticationDetailsSource authenticationDetailsSource ->
        mappableRolesRetriever = {
          SimpleMappableAttributesRetriever mappableAttributesRetriever ->
            mappableAttributes = ['app_admin', 'app_user', 'app_report', 'app_access'] as Set
        }
        userRoles2GrantedAuthoritiesMapper = {
          SimpleAttributes2GrantedAuthoritiesMapper grantedAuthoritiesMapper ->
            convertAttributeToUpperCase = "true"
        }
      }
    }

    preAuthenticatedProcessingFilterEntryPoint(Http403ForbiddenEntryPoint) {
    }

    preAuthenticatedExceptionTranslationFilter(ExceptionTranslationFilter) {
      authenticationEntryPoint = ref('preAuthenticatedProcessingFilterEntryPoint')
    }
  }
}

一切正常,我可以访问 Grails 端的默认属性(例如使用 springSecurityService)。

但现在我有一个从 LDAP 获取自定义属性的新要求(例如所有权)。因此,我将这些属性添加到 LDAP 下的用户中,据我所知 JOSSO 会自动获取这些属性,但我无法在 grails 应用程序端获取这些属性。 有什么办法可以让 grails 端获得这些属性吗?

最佳答案

此类自定义属性应放置在 UserDetails 接口(interface)的实现或 User 类的扩展中。 在 http://static.springsource.org/spring-security/site/docs/3.1.x/reference/preauth.html您可以了解此场景应如何实现 AuthenticationUserDetailsS​​ervice。

完成此操作后,您可以查询 SecurityContextHolder 以获取 UserDetails 实现

SecurityContextHolder.getContext().getAuthentication().getPrincipal()

关于grails - 如何使用 JOSSO 和 Spring Security 从 Grails 应用程序中的 LDAP 获取自定义属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11454576/

相关文章:

java - 编辑 LDAP 照片属性,spring-ldap InvalidAttributeValueException

ldap - OpenDS、OpenDJ 和 OpenAM 之间有什么区别?

grails - 在Grails GSP中预览多张照片

java - 在 grails 2.3.7 中上传文件时出错

grails - Grails中 View 和模板的区别

java - Devtool 拒绝在框架中显示 "My uri",因为它将 'X-Frame-Options' 设置为 'DENY'

java - 当我尝试发布到我的 spring api 时 403 被禁止?

grails - Grails JMS消息无法使用Spring Security添加权限

Java - 使用 linux 访问远程 Activity 目录

具有客户端证书和 Grails 的 Tomcat