3

JOSSO および Spring Security アプリケーションを Grails アプリケーションに正常に統合しました (ユーザー制御に LDAP を使用)。

JOSSO は既に認証を管理しているため、Spring Security の統合には「Pre-Authentication Scenarios」を使用しています。resources.groovySpring Security 構成に関連する私のコンテンツは次のとおりです。

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 からカスタム プロパティを取得するという新しい要件があります (例: ownership)。したがって、JOSSOがこれらのプロパティを自動的に取得することがわかっている限り、LDAPの下でこれらのプロパティをユーザーに追加しますが、grailsアプリケーション側ではこれらを取得できません。これらのプロパティをグレイル側で取得する方法はありますか?

4

1 に答える 1

0

このようなカスタム プロパティは、UserDetails インターフェイスの実装、または User クラスの拡張に配置する必要があります。http://static.springsource.org/spring-security/site/docs/3.1.x/reference/preauth.htmlで、このシナリオで AuthenticationUserDetailsS​​ervice を実装する方法を確認できます。

これを行うと、SecurityContextHolder にクエリを実行して UserDetails 実装を取得できます。

SecurityContextHolder.getContext().getAuthentication().getPrincipal()
于 2012-08-21T15:56:10.770 に答える