如何使用JOSSO和Spring Security在Grails应用程序中从LDAP获取自定义属性?
我已经成功地将JOSSO和Spring安全应用程序集成到我的Grails应用程序中(使用LDAP进行用户控制) 由于JOSSO已经管理身份验证,因此我将使用“预身份验证场景”进行Spring安全集成。下面是我的如何使用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
参考资料。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(..)方法下获取用户数据。