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

如何使用JOSSO和Spring Security在Grails应用程序中从LDAP获取自定义属性?,grails,spring-security,ldap,josso,Grails,Spring Security,Ldap,Josso,我已经成功地将JOSSO和Spring安全应用程序集成到我的Grails应用程序中(使用LDAP进行用户控制) 由于JOSSO已经管理身份验证,因此我将使用“预身份验证场景”进行Spring安全集成。下面是我的参考资料。groovy与Spring安全配置相关的内容: def developmentEnvironment = { if (grailsApplication.config.grails.plugins.springsecurity.active) { preAuthen

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

由于JOSSO已经管理身份验证,因此我将使用“预身份验证场景”进行Spring安全集成。下面是我的
参考资料。groovy
与Spring安全配置相关的内容:

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接口的实现或用户类的扩展中。 在中,您可以找到此场景应如何实现AuthenticationUserDetailsService

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

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

也许我应该重写UserDetails和UserDetailsService类来添加我自己的自定义属性。问题是如何在UserDetailsService类的loadUserByUsername(..)方法下获取用户数据。