LDAP:在身份验证事件期间获取自定义值

我让 Springboot 成功地对 LDAP 进行了身份验证并向视图添加了一个CustomUserDetails模型。

在身份验证活动期间,我还想带回其他详细信息,如电子邮件、电话和城市。

根据this SO answer,这是可能的,我认为也解决了这个问题。

尽管阅读了这两个答案,但我仍然不确定如何继续执行此操作 - 特别是关于第二个答案的步骤 2 和 3 如何关联,以及电子邮件、城市和电话等详细信息映射到哪里?

我的安全等级:

安全


@SpringBootApplication

public class ApplicationSecurity extends WebSecurityConfigurerAdapter {


@Autowired

private UserDetailsService userDetailsService;


@Override

public void configure(HttpSecurity http) throws Exception {

    http

            .authorizeRequests()

                .anyRequest().fullyAuthenticated()

                .and()

            .formLogin()

                .defaultSuccessUrl("/newExhibit");

}


@Override

public void configure(AuthenticationManagerBuilder auth) throws Exception {

    auth

            .userDetailsService(userDetailsService)

            .and()

            .ldapAuthentication()

            .userDnPatterns("uid={0},ou=people")

            .groupSearchBase("ou=groups")

            .contextSource()

            .url("ldap://localhost:8389/dc=springframework,dc=org")

            .and()

            .passwordCompare()

            .passwordEncoder(passwordEncoder())

            .passwordAttribute("userPassword");

}

我的用户对象来自 test-server.ldif


dn: uid=abc123,ou=people,dc=springframework,dc=org

objectclass: top

objectclass: person

objectclass: organizationalPerson

objectclass: inetOrgPerson

cn: Tom Smith

sn: Smith

uid: abc123

userPassword: pass

mail: tom@contoso.com

mobile: +212 307 12345

st: CA


眼眸繁星
浏览 80回答 1
1回答

月关宝盒

查看您的 LDIF 文件,您似乎正在尝试获取定义为inetOrgPerson的一部分的属性。Spring Security 为这个InetOrgPersonContextMapper. 这会将定义的属性映射到InetOrgPerson,这将根据UserDetails需要进行操作。要配置您只需要创建一个新实例并将其连接到您的配置。@SpringBootApplicationpublic class ApplicationSecurity extends WebSecurityConfigurerAdapter {@Overridepublic void configure(AuthenticationManagerBuilder auth) throws Exception {    auth      .ldapAuthentication()        .userDnPatterns("uid={0},ou=people")        .groupSearchBase("ou=groups")        .contextSource()        .url("ldap://localhost:8389/dc=springframework,dc=org")        .and()        .userDetailsContextMapper(new InetOrgPersonContextMapper())        .passwordCompare()        .passwordEncoder(passwordEncoder())        .passwordAttribute("userPassword");}这将相应地映射属性。当您使用 LDAP 时,您不需要UserDetailsService注入,因为它会自动配置LdapUserDetailsService底层。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java